2009-04-01 17 views
1

Hallo ich habe einen Prozess in C# erstellt, um ein externes Programm auszuführen, habe ich die asynchronen Methoden verwendet, um auf dem Standardoutput zu lesen, und alles funktioniert gut. Allerdings habe ich ein Problem, ich drucke eine Zeile, die anzeigt, dass der Prozess abgeschlossen ist. Das Problem ist, dass es manchmal vorkommen kann, dass die Daten im Puffer so groß sind, dass der Prozess möglicherweise beendet wird, aber da der Druck auf einem anderen Thread ausgeführt wird, können die Daten trotzdem gedruckt werden. Die Informationen, die anzeigen, dass der Prozess beendet wurde, werden angezeigt, bevor die gesamte Ausgabe gedruckt wird. Gibt es in .NET etwas, um ein solches Problem zu lösen? Da ich einen asynchronen Aufruf mache, kann ich nicht auf den Wert process.standardoutput zugreifen, da ein Konflikt ausgelöst wird. Was kann ich tun?Prozess wurde beendet, aber der Puffer wird noch gedruckt, C#

Antwort

2

Verwenden Sie die Synchronisierung zwischen Ihren Threads!

Sie in AutoResetEvents aussehen sollen, die perfekt Ihr Szenario passen (dh einen Thread will eine andere informieren, dass ein Ereignis als aufgetreten - in Ihrem exemple, dass die Pufferlese vorbei ist)

Typischerweise Hauptthread wird auf das AutoResetEvent warten, das von der Arbeiterlauffläche gepulst wird, sobald die Arbeit abgeschlossen ist.

In diesem speziellen Fall (dh für einen Thread wartet bis zum Ende), können Sie auch Thread.Join verwenden können, die bis Ihr Arbeitsthread Hauptthread blockiert

+0

ich werde in es.thanks..will Sie sehen, was passiert. –

1

wird beendet Wenn Sie EndInvoke auf dem Asynchron-Delegierten nennen, die Thread sollte blockieren, bis der Vorgang abgeschlossen ist.

Verwandte Themen