如何在使用线程池时告诉线程何时完成?

问题描述:

我的主题:如何在使用线程池时告诉线程何时完成?

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)。

+0

+1'BackgroundWorker'是线程池的一个包装。它提供了他必须手动编写的所有代码。异步委托也安排在线程池上工作。换句话说:不要直接使用'ThreadPool'。使用一个包含线程池的对象来提供有用的额外功能,例如“完成”回调。 – 2011-03-19 14:43:46

可以执行的线程本身(你要调用自己进入GUI线程的照顾)的方法:

ThreadPool.QueueUserWorkItem(p => { 
            check_news(validrsslist, 0); 
            //do something after the task is finished 
            }); 
+0

这就是问题如何访问GUI线程或更改此线程的任何控件?也许我可以从主线程调用一个方法(以某种方式告诉这个新线程调用主线程的方法?) – 2011-03-19 10:40:06

+0

使用Form.Invoke()在UI线程上运行代码。 – 2012-05-09 05:41:50