立即停止线程

时间:2011-07-05 16:16:23

标签: c# multithreading

我在一个帖子中有一个长时间运行的任务。我

Thread a = new Thread(new ThreadStart()({ delegate()
{
   Catalog.Generate(); //long running task
}));
a.Start();

Thread b = new Thread(new ThreadStart()({ delegate()
{
   if( File.Exists(stopFile) )
   {
       a.Abort();
    }
}));
b.Start();

这会在创建停止文件时停止线程A但是catalog.generate方法仍然在运行吗?我该如何结束?

2 个答案:

答案 0 :(得分:1)

问题是你的线程b开始工作并进行检查并立即退出。

你必须为线程b添加某种循环才能继续运行(这是示例代码不是最佳实践):

Thread b = new Thread(new ThreadStart()({ delegate()
{
   int t=0;
   while(i<100)
   { 

       if( File.Exists(stopFile) )
       {
           a.Abort();

        }
        else
        {
           i++;
           Thread.Sleep(500);
        }
    }

}));

答案 1 :(得分:0)

“在调用它的线程中引发ThreadAbortException,开始终止线程的过程。调用此方法通常会终止线程。”

abort方法发送一个线程应该关闭的指示符。它取决于线程处理如何处理它,以及何时响应。我建议Catalog.Generate可能拒绝回复。