2 Stimmen

Warten Sie, bis alle Arbeitsthreads beendet sind

Mögliche Duplikate:
C# Threading/Lock confusion

Ich habe folgendes Problem: Ich habe eine Überwachungsklasse, die ihren eigenen Thread ausführt und Daten aus der Warteschlange in eine Datei schreibt (damit die Hauptanwendung nicht auf E/A warten muss). Aber wenn der Hauptanwendungsthread endet (der Kontrollfluss läuft nach seiner letzten Zeile weiter), endet auch der Überwachungsthread, auch wenn er noch läuft (volle Warteschlange).

Gibt es einen Weg, ohne den Hauptthread zu ändern, um zu warten, bis der Worker-Thread fertig ist? C#.

EDIT: Ich kann den Hauptthread nicht ändern. Ich schreibe nur 'Support'-Code für eine riesige Anwendung mit einer gegebenen API (eine statische Methode, die vorgibt, was ich schreiben soll, woher sie aus der Konfiguration gelesen wird). Es gibt keine Möglichkeit, Threads zu ändern, die Hauptanwendung darf nicht von meinem Code abhängig sein.

1voto

StingyJack Punkte 18514

Vertausche sie. Mache deinen Hauptthread zum Überwacher und starte die Worker-Threads (schreibe von Q in die Datei) von dort aus.

Oder lass den Hauptthread Threads für Überwachung und Arbeit starten und lass den Hauptthread dann drehen und warten (Schleife, bis er Abbruch-/Fertigungsnachrichten von den anderen Threads erhält)

1voto

gregwhitaker Punkte 12784

Sie können ein ManualResetEvent verwenden und WaitOne() am Ende Ihres Hauptausführungsthreads aufrufen. Wenn der Arbeiterthread fertig ist, signalisieren Sie einfach das ManualResetEvent und es setzt die Ausführung des Hauptthreads fort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X