在调用RunWorkerAsync但在函数退出之前取消订阅DoWork是安全的吗?
本文关键字:DoWork 安全 取消 RunWorkerAsync 调用 函数 退出 | 更新日期: 2023-09-27 18:08:55
我有很多方法(它们一次只运行一个),它们都使用相同的RunWorkerCompleated
和ProgressChanged
方法,但它们都有不同的Dowork
方法。这样做安全吗?
private void button_Process_Click(object sender, EventArgs e)
{
bgWork_Process.DoWork += Scrub_DoWork;
bgWork_Process.RunWorkerAsync();
bgWork_Process.DoWork -= Scrub_DoWork;
}
或者我这样做会遇到边缘情况吗?我没有在MSDN上看到任何东西说它是不允许的,它(到目前为止)在我的程序中运行良好,但我想在这里检查一下,看看是否有人在这样做时遇到了麻烦。
要确保事件处理程序在完成之前不会被删除,您可以做类似于
的事情Action DoWorkAction;
private void button_Process_Click(object sender, EventArgs e)
{
gbHistory.Enabled = false;
gbScrub.Enabled = false;
DoWorkAction = new Action(Scrub_DoWork);
bgWork_Process.DoWork += DoWorkAction;
bgWork_Process.RunWorkerAsync();
}
在任何处理完成的地方
private void bgWork_Process_CompletedHandler(object sender, EventArgs e)
{
bgWork_Process.DoWork -= DoWorkAction;
}
我确实觉得,然而;它可能是更好的只是有单独的BackGroundWorkers
为您所有的行动,你需要执行,而不是共享一个类似的一个或包装在一个类,这样你可以更清楚你在做什么。