我的主題:如何在使用線程池時告訴線程何時完成?
public void main_news_thread(MainApplication main)
{
ThreadPool.QueueUserWorkItem(p => check_news(validrsslist, 0));
}
我把這個線程的時間間隔每...
我怎麼能知道當線程完成,所以我可以調用的處理GUI其他兩種方法?我怎樣才能引用這個線程池線程?
我的主題:如何在使用線程池時告訴線程何時完成?
public void main_news_thread(MainApplication main)
{
ThreadPool.QueueUserWorkItem(p => check_news(validrsslist, 0));
}
我把這個線程的時間間隔每...
我怎麼能知道當線程完成,所以我可以調用的處理GUI其他兩種方法?我怎樣才能引用這個線程池線程?
既然你在談論UI,你可能想看看的BackgroundWorker ,它提供了UI線程上觸發一個RunWorkerCompleted事件,並指示成功/失敗/取消等
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker_events.aspx
就個人而言,雖然,我只是跑我的工作者代碼結束時的回調方法(記住切換回UI線程,通過WPF中的Dispatcher.Invoke或winforms中的this.Invoke)。
可以執行的線程本身(你要調用自己進入GUI線程的照顧)的方法:
ThreadPool.QueueUserWorkItem(p => {
check_news(validrsslist, 0);
//do something after the task is finished
});
這就是問題如何訪問GUI線程或更改此線程的任何控件?也許我可以從主線程調用一個方法(以某種方式告訴這個新線程調用主線程的方法?) – 2011-03-19 10:40:06
使用Form.Invoke()在UI線程上運行代碼。 – 2012-05-09 05:41:50
+1'BackgroundWorker'是線程池的一個包裝。它提供了他必須手動編寫的所有代碼。異步委託也安排在線程池上工作。換句話說:不要直接使用'ThreadPool'。使用一個包含線程池的對象來提供有用的額外功能,例如「完成」回調。 – 2011-03-19 14:43:46