.net - BackgroundWorker:一旦 DoWork() 事件处理程序完成,它就死了吗?

标签 .net windows multithreading backgroundworker

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

最佳答案

您可以随心所欲地调用 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;
    }
}

关于.net - BackgroundWorker:一旦 DoWork() 事件处理程序完成,它就死了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984018/

相关文章:

c# - DownloadStringAsync 的返回类型为 void。那么我该如何等待呢?

asp.net - 如何在 Visual Studio 2010 中从网站创建解决方案文件 (.sln)

c# - ScintillaNET 中的缩进和智能缩进

windows - 使用 powershell 设置新的 smb 共享时出错

c# - 获取访客的当前位置

windows - 文件名中的 MS-DOS 时间戳

windows - 如何在 Windows 上同时搜索多个 Powerpoint 和 PDF 文件中的文本?

c++ - GL顶点数据的QThread数据共享方法

java - 线程永远等待通知情况

c# - 使用 Parallel.ForEach() 时防止远程系统过载