我正在启动多个执行不同操作的线程。 线程都有一个“endme”布尔变量。现在,当我尝试通过设置该变量来结束线程然后结束调试器时,它会尖叫它无法结束所有进程。
调试了一下后,我发现当相应地设置“end me”变量时,进程进入其代码的“结束”部分。但随后会发生异常并被抛出。
现在我的问题是:异常是否导致线程无法再结束?
答案 0 :(得分:1)
将我的评论提升为答案,因为它是正确的,甚至可能是相关的。
在没有任何代码重现问题的情况下,我会注意到如果你通过设置一个布尔变量" endMe"来在线程之间进行通信,那么你需要使用volatile reads和writes访问该变量,例如(在.Net 4.5中):
public class ThreadedWorker
{
bool endMe = false;
public bool EndSignalled { get { return Volatile.Read(ref endMe); } }
public void SignalEnd()
{
Volatile.Write(ref isEnded, true);
}
}
或者在所有c#版本中,您都可以使用volatile
keyword
public class ThreadedWorker
{
volatile bool endMe = false;
public bool EndSignalled { get { return endMe; } }
public void SignalEnd()
{
endMe = true;
}
}