考虑下面的代码:
public void MyMethod()
{
bool flag=true;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (x, y) =>
{
//time consuming task
if (flag)
{
//do something
}
};
worker.RunWorkerCompleted += (x, y) =>
{
if (flag)
{
//do something
}
};
worker.RunWorkerAsync();
}
也许是一个愚蠢的问题,但据我所知,在runworkerasync调用之后,dowork会引发在不同线程上运行其方法的事件。因为我觉得代码在调用后退出,所以在事件处理程序中检查局部变量的值是否flag安全?doworkMyMethodworker.RunWorkerAsync