我正在使用C#UI来触发多个线程。每个线程代表一个功能,可能需要几分钟才能完成。
UI可能会多次触发同一个线程,因此我需要多次重启该线程。但是线程无法重新启动。因此,我为线程创建了一个状态变量,当状态不正确时,线程将不执行代码:
private void FindThread(int nod)
{
//Find the minimum reading
while (true)
{
if (state == MYSTATE.find)
{
dowork();
}
}
}
但是,当两个或多个线程以这种方式工作时,似乎只有while(true)句子会阻止整个程序....
在我的程序中,一次只有一个线程会执行其任务。我正在考虑用案例制作一个大线程。 我可以就此提出你的建议吗?我认为可以有更好的解决方案。
非常感谢。
答案 0 :(得分:1)
您的问题有几个问题。
首先,你没有开始相同的线程,我认为你所做的是用相同的线程函数启动线程" ex-LongTask()Simple Thread tutorial
其次,如果你必须为同一类任务使用多个线程,那么开始一个新线程并结束是非常昂贵的。对于这种情况,您可以使用线程池Thread Pools
你现在面临的问题是竞争条件。可能是多个线程使用相同的资源[state
或MYSTATE.find
]并更新该资源,以便您的条件创建死锁。 read about deadlock
一些建议 -
使用LOCKS来避免竞争条件
private Object thisLock = new Object();
public void MyThreadMethod()
{
lock (thisLock)
{
// Accessing common resources
}
}