BackgroundWorker: он мертв после завершения обработчика событий DoWork ()? - PullRequest
3 голосов
/ 13 мая 2011

То, что я получаю, это когда вы закончите свою работу с обработчиком DoWork (), а затем, возможно, выполните RunWorkerCompleted (), можете ли вы затем повторно вызвать RunWorkerAsync () и снова ввести его в обработчик DoWork ()Или вам нужно выполнить еще одну «новую» операцию и создать новый BackgroundWorker?Просто интересно, если какая-либо утилизация или другая очистка будет выполнена после того, как эти вещи произойдут, и теперь у вас больше нет жизнеспособного рабочего bg.

1 Ответ

2 голосов
/ 13 мая 2011

Вы можете звонить RunWorkerAsync сколько хотите.Вам не нужно создавать новый BackgroundWorker объект.


Единственное ограничение заключается в том, что вы не можете вызвать его, пока BackgroundWorker уже занят асинхронной операцией.Таким образом, общий подход заключается в следующем: скажем, вы звоните RunWorkerAsync, когда пользователь нажимает кнопку.Затем отключите кнопку и снова включите ее в обработчике для события RunWorkerCompleted:

void DoWorkButton_Click(object sender, EventArgs e)
{
    DoWorkButton.Enabled = false;
    Worker.RunWorkerAsync();
}

void Worker_DoWork(object sender, DoWorkEventArgs e)
{
    // Do some async operation.
}

void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    try
    {
        // Do some updates.
    }
    finally
    {
        DoWorkButton.Enabled = true;
    }
}
...