C#如何杀死父线程
问题描述:
父母有几个子线程。C#如何杀死父线程
如果用户点击停止按钮,父线程应该被所有子线程终止。
//calls a main thread
mainThread = new Thread(new ThreadStart(startWorking));
mainThread.Start();
////////////////////////////////////////////////
startWorking()
{
ManualResetEventInstance = new ManualResetEvent(false);
ThreadPool.SetMaxThreads(m_ThreadPoolLimit, m_ThreadPoolLimit);
for(int i = 0; i < list.count ; i++)
{
ThreadData obj_ThreadData = new ThreadData();
obj_ThreadData.name = list[i];
m_ThreadCount++;
//execute
WaitCallback obj_waitCallBack = new WaitCallback(startParsing);
ThreadPool.QueueUserWorkItem(obj_waitCallBack, obj_ThreadData);
}
ManualResetEventInstance.WaitOne();
}
我想杀死mainThread。
答
你肯定是不要想要杀死这里的任何线程,因为(除其他原因外)问题中的“子线程”全部来自线程池。
请参阅this article关于如何创建和终止线程。
在你的情况,你有多个线程都在使用startParsing
方法。假设这个方法有一个循环,你可以创建一个叫做_stillWorking
的类级别为bool
的东西,并在startWorking
方法的开始处将其设置为true
。
在startParsing
的循环内,您每次都检查_stillWorking
是否为true
。要“取消”所有这些线程,则只需将_stillWorking
设置为false
并等待线程完成。
答
一般建议:不要杀死线程(请参阅,例如Killing a thread)。有各种各样令人讨厌的资源泄漏和数据腐败风险。
让线程很好地表现出来,并让它们在发送信号时完成工作,而不是通过任何您喜欢的IPC机制。
我不记得.NET API识别父和子线程。这会使你的关系成为你追踪的责任。
答
您可能会考虑将请求从子线程退出并传递给父级,然后在那里处理它。我想你会发现整体上更简单。
你想做什么?如在,你是什么产生的线程? – 2010-04-29 13:09:56