30秒后停止在线程中执行代码

如果需要很长时间,如何停止在线程中执行代码。 我有几个线程一直在工作,但在线程中的代码执行太长而应用程序停止响应之后。

是否有可能如果代码没有在30s执行线程将停止执行它并转到下一个代码…所以应用程序仍然活着,不会停止响应。 我正在使用C#.net 3.5

我的回答类似于我在这里发布的回答。

您可以通过在监视线程中等待工作线程达到指定的时间来执行此操作,然后强制终止工作线程(如果尚未完成)。 请参阅下面的示例代码。

但是,一般情况下,使用Thread.Abort强制终止一个线程并不是一个好主意,因为目标线程不一定处于已知状态,并且可能具有可能未被释放的资源的开放句柄。 使用Thread.Abort是代码气味 。

更干净的方法是更改​​工作线程以管理其自己的生命周期。 工作线程可以检查它在众所周知的检查点执行了多长时间,然后在超出某个限制时停止。 这种方法的缺点是需要在线程正在进行的实际工作中分散许多检查点。 此外,通过在检查点之间进行过多计算,工作线程可能很容易超出限制。

 class Program { static void Main(string[] args) { if (RunWithTimeout(LongRunningOperation, TimeSpan.FromMilliseconds(3000))) { Console.WriteLine("Worker thread finished."); } else { Console.WriteLine("Worker thread was aborted."); } } static bool RunWithTimeout(ThreadStart threadStart, TimeSpan timeout) { Thread workerThread = new Thread(threadStart); workerThread.Start(); bool finished = workerThread.Join(timeout); if (!finished) workerThread.Abort(); return finished; } static void LongRunningOperation() { Thread.Sleep(5000); } }