我要说的是,一旦您使用 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/