如果在C#中花费太长时间,我如何杀死一个线程?

时间:2009-07-20 18:29:19

标签: c# multithreading

重复:Killing a thread (C#)

<小时/> 我正在向我的线程传递一个threadstart委托并启动它。

如果我在3秒内没有收到回复,我需要一种杀死此线程的方法。

实现这一目标的最佳方法是什么?它不一定是thread / threadstart,这就是我到目前为止所使用的。

4 个答案:

答案 0 :(得分:13)

杀死一个帖子总是一个坏主意,应该保留给那些你已经在处理你将要杀死的病态进程的场景。你是否拥有线程中的代码?如果设置了标志,可能会进行一些状态检查并彻底退出?

如果没有,并且您需要在中止后使用代码,则单独的进程可能比线程启动更安全。至少你不会削弱你的自己的代码(例如,未发布的锁或挂起的静态构造函数/类型初始化程序)。

答案 1 :(得分:5)

你可以调用myThread.Abort,这会(通常)杀死线程,但这通常是一个非常糟糕的主意。

将堕胎逻辑放入线程本身通常是更好的选择。如果线程无法在3秒的时间段内处理其工作,则它可以中止并返回适当的状态。这是一个更安全的操作,从长远来看将更易于维护。

答案 2 :(得分:1)

使用IAsyncResult.AsyncWaitHandle.WaitOne()方法查看此SO-solution

答案 3 :(得分:0)

Thread.Join方法应该有一个TimeSpan参数,使其退出...
寻找TimeSpan and other synchronization methods on this page

相关问题