在使用线程池时如何判断线程何时完成?

时间:2011-03-19 10:25:44

标签: c# .net multithreading threadpool

我的主题:

public void main_news_thread(MainApplication main)
{
   ThreadPool.QueueUserWorkItem(p => check_news(validrsslist, 0));
}

我每隔一段时间就打电话给这个帖子......

我怎么知道线程什么时候结束所以我可以调用另外两个处理GUI的方法?我怎样才能引用这个线程池线程?

2 个答案:

答案 0 :(得分:4)

由于您在谈论UI,您可能希望查看BackgroundWorker,它提供RunWorkerCompleted事件,在UI线程上触发 ,并指示成功/失败/取消等。

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker_events.aspx

但就个人而言,我只是在我的工作代码末尾运行一个回调方法(记得切换回UI线程,通过WPF中的Dispatcher.Invoke或winforms中的this.Invoke)。

答案 1 :(得分:1)

你可以在线程本身执行这些方法(你必须自己调用来访问gui线程):

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