我在C#应用程序中使用线程。我有以下情形:在C#中处理线程(死锁)
线程A,调用线程B,使用此代码:
ThreadStart t =() => StreamManager.ManageStream.mixThread(ref streamClosed, ref opEnded);
Thread threadB = new Thread(t);
threadB.Start();
的线程B做好这项工作多次:
while (!streamClosed)
{
System.Threading.Thread.Sleep(3000);
//some stuff here
}
opEnded = true;
布尔streamClosed
和opEnded
是从线程A传递给线程B,通过引用(使用ref
关键字)
线程A在启动线程B,请执行以下操作:
streamClosed = true;
while(!opEnded)
{
System.Threading.Thread.Sleep(1000); //wait
}
并且线程B停止工作。但在某些情况下,似乎处于僵局,因为我从Windows中的活动管理器杀死它,所以仍然被阻止。
有什么不对?
你能显示调用代码吗? –
是的,我编辑了我的问题 – GVillani82
您是否尝试实施协作式取消?有更简单的方法来实现这一点。 – Gusdor