2012-05-08 44 views
4

是否可以爲使用Thread類創建的線程提供回調(宣佈活動完成)。我以下面的方式創建了線程,但找不到回調的方法。是否可以爲使用Thread類創建的線程回調

Thread thread = new Thread(StartPoll); 
thread.SetApartmentState(ApartmentState.STA); 

thread.Start(); 

回答

6

不直接。但你總是可以這樣做:

new Thread(() => { StartPoll(); Callback(); }) 
+0

非常聰明。創建另一個類並分配一個委託等等,當你想要做的只是在完成時調用一個簡單的方法。 –

3

將公寓狀態設置爲STA是不夠的,第二個要求是,你必須泵送一個消息循環。 Application.Run()在Winforms或WPF中。它實際上是允許將某個調用封送到特定線程的消息循環。分別由Control.Begin/Invoke和Dispatcher.Begin/Invoke()實現。

然而這更多的是UI實現細節。通用解決方案與UI線程非常相似,您可以使用線程安全隊列和「主」線程中的循環從隊列中讀取對象。就像你可以調用的代理一樣。 producer/consumer problem的標準解決方案。 .NET 4 BlockingCollection類使它變得簡單。重寫線程代碼,使其循環並保持響應工作請求並不總是那麼容易。

相關問題