自杀问题

时间:2010-11-16 07:29:03

标签: c# .net

我想在发生非常糟糕的事情时杀死一个线程。你有什么建议自杀?

4 个答案:

答案 0 :(得分:3)

你永远不应该“杀死”一个线程。在您的主程序中,您可以使用Thread.Abort方法中止它,但不建议这样做,并且完全没有必要。

你的线程应该只是一个执行长循环的方法。如果发生“非常糟糕”的事情,只需从此方法返回并且线程将结束。

这对于这样的循环就足够了:

private void MyThreadLoop()
{
   try 
   {
        while (someCondition)
        {
            // do a lengthy operation
        }
   }
   catch (Exception ex) 
   {
        Log.Error("Something bad happened: ", ex);
   }
}

public void Start() 
{  
    Thread t = new Thread(MyThreadLoop); 
    t.Start()
}

另一方面,如果你需要你的程序来杀死线程(但这不是你命名的“自杀”),那么你应该信号你希望它结束​​的线程,而不是在不知道后台发生了什么的情况下中止它。

答案 1 :(得分:0)

没有必要完全杀死一个线程,你需要做的就是让它停止当前任务。

答案 2 :(得分:0)

在线程内部,它足以从其函数返回。在线程之外,有方法Thread.Abort()。

答案 3 :(得分:0)

你可以尝试这样的事情。线程一直运行,直到它从“外部”接收到信号然后存在。

private static void Main(string[] args)
{
    var shouldExit = new AutoResetEvent(false);

    ThreadPool.QueueUserWorkItem(
    delegate
    {
        while (true)
        {
            Console.WriteLine("Running...");

            if (shouldExit.WaitOne(0)) break;
        }

        Console.WriteLine("Done.");
    });

    // wait a bit
    Thread.Sleep(1000);      
    shouldExit.Set();

    Console.ReadLine();
}