2011-07-21 62 views
0

我有幾個線程在我的WPF應用程序的一個線程池中運行。我需要監視它們,可能來自另一個線程,以確定是否所有這些線程都已終止。 我將如何能夠實現這一點。如何從另一個線程監視C#線程

爲了簡單起見,我使用場景是:

  1. 點擊按鈕
  2. 啓動多個線程的線程池。
  3. 啓動另一個線程來監視ThreadPool中的那些線程
  4. 鎖定WPF應用程序的UI。
  5. 當步驟3中的線程設置全局值以指示(2)中啓動的線程已終止時,釋放鎖定。
+0

[WaitHandle.WaitAll 64句柄限制的解決方法的可能的重複?](http://stackoverflow.com/questions/2702545/workaround-for-the-waithandle-waitall-64-handle-limit) –

+0

儘管非常不同的標題這是關於同樣的問題,並有一個解決方案。 –

回答

0

手頭的問題實際上太侷限了。爲了適應最初的有缺陷的設計,我必須採用Ad Hoc方法。

我的方法是隻需在線程啓動時增加計數器,並在線程終止時減少計數器的值。爲了監視計數器的價值,我發起了另一個線程來簡單地監視計數器的值。也許不是一個優雅的方法,但似乎工作正常。

1

將線程池中的所有線程放入數組中。當您想等待池線程退出時,請使用WaitHandle.WaitAll等待線程完成。

+0

@亨克霍爾曼:我想他會寫他自己的線程池,因爲他想控制線程。如果使用內置游泳池,那麼整個創意就會有缺陷。 –