Как я могу узнать, когда поток завершился при использовании пула потоков? - PullRequest
2 голосов
/ 19 марта 2011

Мой поток:

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

Я вызываю этот поток каждый интервал времени ...

Как узнать, когда закончится поток, чтобы я мог вызвать два других метода, которые имеют дело сграфический интерфейс?Как я могу обратиться к этой теме?

Ответы [ 2 ]

4 голосов
/ 19 марта 2011

Поскольку вы говорите о пользовательском интерфейсе, вы можете посмотреть на BackgroundWorker, который предлагает событие RunWorkerCompleted, которое запускает в потоке пользовательского интерфейса и указывает на успех / сбой / отмену и т. Д.

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

Лично я бы просто запустил метод обратного вызова в конце моего рабочего кода (не забывая переключиться обратно на поток пользовательского интерфейса, через Dispatcher.Invoke в WPF или this.Invoke в winforms).

1 голос
/ 19 марта 2011

Вы можете выполнять методы в самом потоке (вы должны позаботиться о том, чтобы вызывать себя для доступа к потоку графического интерфейса):

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