2010-10-13 89 views

回答

3

是的。

如果您提供更多信息,我們可以在答案中提供更多詳細信息。

通常,您建立一個通信系統(消息隊列,事件或委託),用於表示進程/步驟/線程已完成。發生這種情況時,請啓動下一個線程。

+2

+1船長明顯。 =) – 2010-10-13 16:44:30

4

當然。讓第一個線程啓動第二個線程,或設置某種標誌告訴主機應用程序啓動第二個線程。當然,我必須問:如果這些線程總是按順序運行,爲什麼創建第二個線程而不是在第一個線程中執行所有工作?

+0

「爲什麼要創建第二個線程」 - 這通常是正確的,除非第二個線程在第一個線程完成之前可以執行一些*處理。有時候,你可以做一半的工作,但需要等待結果等等。 – 2010-10-13 16:50:12

6

在.NET 4中,您可以用任務而不是線程,然後使用延續到實現自己的目標:

var firstTask = Task.Factory.StartNew(() => PerformSomeLongRunningAction();); 

var secondTask = firstTask.ContinueWith(t => PerformSecondAction();); 

在.NET < = 3.5,該選項會有所不同。最好的方法是使用WaitHandle來表示你的第二項任務。第一個後臺線程需要將信號等待句柄它完成時:

var mre = new ManualResetEvent(false); 

ThreadPool.QueueUserWorkItem(o => 
     { 
      PerformSomeLongRunningAction(); 
      mre.Set(); // Signal to second thread that it can continue 
     }); 

ThreadPool.QueueUserWorkItem(o => 
     { 
      mre.WaitOne(); // Wait for first thread to finish 
      PerformSecondAction(); 
     }); 
+1

我剛剛學到了一些東西;今天不會是一個完全的浪費! – 2010-10-13 16:48:46

+0

@David:很高興聽到;) – 2010-10-13 16:49:28

+0

是創建的任務運行在一個單獨的線程?看起來這可能只是圍繞'Thread'的一個更友好的包裝。 – 2010-10-13 16:50:49

相關問題