【发布时间】:2015-05-14 06:56:38
【问题描述】:
想象一下我有这样的代码:
private bool flag = false;
public SomeClass()
{
public void setup()
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
if(!worker.IsBusy)
worker.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
if(flag == true)
return;
//whatever You want the background thread to do...
SomeClass.SomeStaticMethodWhichHasLoopInside();
}
}
当用户在我的应用程序中单击退出按钮时,我可以在里面设置flag=true - 这是停止由BackgroundWorker 启动的线程的正确方法吗?
我只想在应用程序想要退出时才这样做 - 这样我就停止了线程。还是会被自动杀死?
【问题讨论】:
-
最佳实践写在Sriram Sakthivel's answer 但是我必须提到,如果您将
flag标记为volatile,您的解决方案可能会起作用。如果没有volatile关键字 - 它可以防止变量被缓存 - 优化器可能会将线程的flag存储在 L2 或寄存器中,而主线程的flag存储在 RAM 中,所以你没有 @ 987654330@ 你的帖子可能永远不会得到通知。
标签: c# multithreading backgroundworker