BackgroundWorker:一旦DoWork()事件处理程序完成,它是否就死亡了?

3
我想说的是,当你完成DoWork()处理程序的工作并且可能执行RunWorkerCompleted()后,是否可以重新调用RunWorkerAsync()并使其重新进入DoWork()处理程序,还是需要进行另一个“new”操作并创建一个新的BackgroundWorker?只是想知道在这些事情发生后是否进行了任何清理或其他清除操作,现在你不再拥有可行的bg worker。

确保在再次调用RunWorkerAsync之前等待事件。 - Lasse V. Karlsen
1个回答

2
您可以随时调用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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接