【问题标题】:BackgroundWorker: is it dead once the DoWork() event handler is done?BackgroundWorker:一旦 DoWork() 事件处理程序完成,它就死了吗?
【发布时间】:2011-05-12 20:24:09
【问题描述】:

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

【问题讨论】:

  • 请确保在再次致电RunWorkerAsync 之前等待事件发生。

标签: .net windows multithreading backgroundworker


【解决方案1】:

您可以随意拨打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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多