如何在使用线程池时告诉线程何时完成?
我的主题:如何在使用线程池时告诉线程何时完成?
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