Как вызвать процедуру после завершения задачи - PullRequest
2 голосов
/ 24 июля 2011

Как я могу узнать о завершении задачи? Мне нужна вещь вроде RunWorkerCompleted событие в BackGroundWorker.

спасибо

Ответы [ 2 ]

3 голосов
/ 24 июля 2011

Вы можете использовать ContinueWhenAll, поэтому вы будете уведомлены , когда все процессы завершатся.

Task.Factory.ContinueWhenAll(myTasks, _ => OnAllTasksFinished());

private void OnAllTasksFinished()
{
    MessageBox.Show("Finished!");  
}
0 голосов
/ 24 июля 2011

Я вызываю многопоточный метод из задачи (в конце)

Шаблон многопоточного метода:

private void SomeEventHandler(object sender, EventArgs e)
{
MethodInvoker method = delegate
    {
        uiSomeTextBox.Text = "some text";
    };

if (InvokeRequired)
    BeginInvoke(method);
else
    method.Invoke();

}

Вы можете безопасно работать с WFA, как в bacroundWorker

Когда алгоритм в BackGrounWorker приходит к возвращению, он генерирует событие о завершении работы.Но объект потока все еще может продолжать существовать.Это внутренняя особенность Windows и CLR, - потоков, которые могут существовать некоторое время после смерти.

...