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。

+1

你想做什么?如在,你是什么产生的线程? – 2010-04-29 13:09:56

你肯定是不要想要杀死这里的任何线程,因为(除其他原因外)问题中的“子线程”全部来自线程池。

请参阅this article关于如何创建和终止线程。

在你的情况,你有多个线程都在使用startParsing方法。假设这个方法有一个循环,你可以创建一个叫做_stillWorking的类级别为bool的东西,并在startWorking方法的开始处将其设置为true

startParsing的循环内,您每次都检查_stillWorking是否为true。要“取消”所有这些线程,则只需将_stillWorking设置为false并等待线程完成。

一般建议:不要杀死线程(请参阅,例如Killing a thread)。有各种各样令人讨厌的资源泄漏和数据腐败风险。

让线程很好地表现出来,并让它们在发送信号时完成工作,而不是通过任何您喜欢的IPC机制。

我不记得.NET API识别父和子线程。这会使你的关系成为你追踪的责任。

您可能会考虑将请求从子线程退出并传递给父级,然后在那里处理它。我想你会发现整体上更简单。