BackgroundWorker:DoWork()事件处理程序完成后它已经死了吗?

时间:2011-05-12 20:24:09

标签: .net windows multithreading backgroundworker

我得到的是,一旦您使用DoWork()处理程序完成工作,然后可能执行RunWorkerCompleted(),您是否可以重新调用RunWorkerAsync()并让它重新进入DoWork()处理程序,或者您是否需要执行另一个“新”操作并创建新的BackgroundWorker?只是想知道在这些事情发生之后是否进行了任何处理或其他清理,现在你不再有一个可行的工人。

1 个答案:

答案 0 :(得分: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;
    }
}