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#
1
A
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
1
wird beendet Wenn Sie EndInvoke auf dem Asynchron-Delegierten nennen, die Thread sollte blockieren, bis der Vorgang abgeschlossen ist.
Verwandte Themen
- 1. Wie wurde mein Prozess beendet?
- 2. C# process.start, woher weiß ich, ob der Prozess beendet wurde?
- 3. Wiederherstellungsstatus, nachdem der Prozess beendet wurde
- 4. Process.Close() erzeugt Prozess nicht beendet wird, C#
- 5. Python-Prozess wird nicht beendet
- 6. Nicht korrekt gedruckt, aber immer noch
- 7. Neustart der Android-Anwendung, nachdem der Prozess beendet wurde
- 8. Wie aktiviert man die Formularschaltfläche, nachdem der Prozess beendet wurde?
- 9. Versuchen, Code auszuführen, wenn Prozess beendet wird C#
- 10. Warum warten Sie nicht, bis der Prozess beendet wird?
- 11. Wird Prozess/Thread-Release-Mutex beendet?
- 12. Wie wird eine Java-Anwendung ordnungsgemäß beendet, die beendet wird, nachdem die Befehlszeile geschlossen wurde, von der sie ausgeführt wurde?
- 13. Wie kann ein Prozess abgebrochen werden, ohne dass eine Ausnahme "Prozess wurde beendet" angezeigt wird?
- 14. Node.js-Prozess wird bei AWS-Instanzen beendet
- 15. Prozess beendet nicht
- 16. Prozess wird nicht beendet, wenn ich Queue
- 17. C# - Pausiere den Haupt-Thread und räume auf, bevor der Prozess beendet wird.
- 18. Warten Sie, bis der Prozess beendet ist
- 19. Verwalten Sie eine .NET-App so, dass sie ordnungsgemäß beendet wird, wenn sie beendet/beendet wurde
- 20. C - Prozess beendet mit Fehlercode 3221225477
- 21. WCF TCP-Verbindungen bleiben offen, wenn der Prozess beendet wird
- 22. C# -Aufnahmemethode, nachdem die Browsersteuerung beendet wurde?
- 23. was kann dazu führen, dass node.js gedruckt und beendet wird?
- 24. Wie erhalten Sie .gcda-Dateien, wenn der Prozess beendet wird?
- 25. SIGCHLD verstehen, wenn der untergeordnete Prozess beendet wird
- 26. Wie kann man wissen, wann ein Prozess beendet wurde?
- 27. C# Versucht, den Timer, der beendet wurde zu entsorgen - System.ObjectDisposedException
- 28. AWS Lambda "Prozess beendet, bevor die Anforderung abgeschlossen wurde"
- 29. "StandardOut wurde nicht umgeleitet oder der Prozess wurde noch nicht gestartet" beim Lesen der Konsolenbefehlsausgabe in C#
- 30. Wie kann ich feststellen, ob ein Prozess beendet wurde?
ich werde in es.thanks..will Sie sehen, was passiert. –