2016-04-29 4 views
0

ich eine Multithread-Anwendung haben, und ich will, wenn alle Fäden vor dem Start eines neuen, dh beendet haben, um zu sehen in regelmäßigen Abständen einen Timer zu verwenden, um in der Lage zu überprüfen:überprüfen, um von Zeit zu Zeit, wenn alle Threads abgeschlossen haben zu sehen

var checkStatusTimer = new System.Threading.Timer(new TimerCallback(CheckThreads), null, 10000, 10000); 

Das ist soweit ich gekommen bin. Was müsste in der CheckThreads-Methode überprüft werden, um zu sehen, ob sie erledigt sind? Ich dachte an etwas in der Art einer Funktion, die sie wie folgt überprüft:

   foreach (Thread thread in Threads) 
      { 
       Thread t = thread; 
       if (t.ThreadState != ThreadState.Stopped) 
        return false; 
      } 

Bin ich auf dem richtigen Weg? Ist das der richtige Weg? Oder sollte ich stattdessen einen System.Timers.Timer verwenden? Auch das Funktionsformular innerhalb dieser periodischen Überprüfung ist statisch. Jede Hilfe wäre willkommen.

+0

Ich schlage vor, Sie fügen das Tag [Tag: C#] oder was auch immer das ist. – nwp

Antwort

1

Verwenden Sie Task anstelle von Thread. Dann können Sie eine kombinierte Aufgabe erstellen:

Task[] tasks = ...; //You provide this 
Task combined = Task.WhenAll(tasks); 

Jetzt können Sie für die Fertigstellung überprüfen: combined.IsCompleted. Sie können auch diese Aufgabe Wait und await.

Thread ist eine ältere API, die selten zu verwenden ist.

+0

Die Anwendung läuft in .NET 3.5, die Tasks nicht unterstützt. – user609926

+0

@ user609926 Verwenden Sie dieses nuget-Paket, um eine Aufgabe für .net 3.5 einzuführen: https://www.nuget.org/packages/TaskParallelLibrary/ – Maarten

0

@rs aufgabenbasierter Ansatz ist am besten, aber wenn Sie sich auf Threads verlassen müssen, dann schlage ich vor, dass jeder Thread beendet wird und eine Methode aufruft, die den Thread aus Ihrer Threads Sammlung entfernt. Dann müssen Sie in Ihrem Timer-Callback nur die Anzahl der Sammlungen überprüfen. Basierend auf ThreadState is not advisable.

Verwandte Themen