2011-03-14 113 views
5

如何等待一種方法來完成使用C#?等待方法完成

+5

你能解釋一下好一點你想實現什麼,請? – FarligOpptreden 2011-03-14 09:58:41

+5

如果您的應用程序不是多線程的,並且您調用的方法不是異步,則在方法返回後將調用下一段代碼。我們在這裏需要更多的信息來處理,你使用線程還是'Begin ..()'方法? – Kevin 2011-03-14 10:01:30

+0

我們必須假設您正在討論異步方法調用嗎? – 2011-03-14 10:02:16

回答

43

除非您使用多個線程,否則執行將不會繼續在調用代碼的中,直到方法完成。

如果你使用多線程,它真的取決於你如何啓動任務。例如,您可以使用異步委託執行(foo.BeginInvoke(...))或任務並行庫,或者簡單地創建一個新線程。每種方法都有自己的等待,直到任務/線程完成。請給我們更多的信息,我們可以幫你多,但選擇可以包括:

  • delegate上EndInvoke,傳遞由BeginInvoke
  • 調用Task.Wait(任選超時)返回IAsyncResult
  • 調用Thread.Join(任選超時)
+30

+1一個明智的答案,喬恩Skeet不噴出任何廢話。 – mdm 2011-03-14 10:01:56

+0

+1當然.. @mdm這就是爲什麼我們有[Jon Skeet](http://blog.stackoverflow.com/2008/11/stack-overflow-is-you)在這裏 – 2011-03-14 10:10:23

+0

爲實際提供選項的情況下+1多線程代碼。 – 2011-03-14 10:10:29

10
  1. 調用該方法。
  2. 等待它完成。

注意:只適用於阻止呼叫。

+35

偉大的算法... /我鼓掌PS:你忘了'3。利潤!!!' – zerkms 2011-03-14 10:00:44

6

我以爲你是問如何等待另一個蘇氨酸執行代碼在你的主線程中。爲此目的,Thread.Join()方法將做你想要的。

(一個很好的教程就如何做到Multithreading。)

+1

我知道你在幾個月前發佈了,但是這個教程的鏈接只是挽救了我的生活。我無法感謝您分享該鏈接。 – JClaspill 2011-10-28 16:14:45

+0

@JClaspill我很高興它幫助你:) – 2011-10-28 17:48:07