Abort一定会抛出ThreadAbortException异常的,莫非你的线程执行体有问题?

解决方案 »

  1.   

    ThreadAbortException 类
    在对 Abort 方法进行调用时引发的异常。无法继承此类。
    备注
    在调用 Abort 方法以销毁线程时,公共语言运行库将引发 ThreadAbortException。ThreadAbortException 是一种可捕获的特殊异常,但在 catch 块的结尾处它将自动被再次引发。引发此异常时,运行库将在取消线程前执行所有 finally 块。由于线程可以在 finally 块中进行未绑定的计算,因此必须调用 Join 方法以保证线程已死亡。Join 是一个阻塞调用,它要到线程实际停止执行后才返回。ThreadAbortException 使用值为 0x80131530 的 HRESULT COR_E_THREADABORTED。
      

  2.   

    就是啊!Abort一定会抛出ThreadAbortException 的啊!而且可不可以这样啊?

    catch(ThreadAbortException ex)
    {
         MessageBox.Show("ok"+ex.Message);
    }放到你的线程体里面?
      

  3.   

    try:using System;
    using System.Threading;class Test{
      static void Main(){
        Thread t = new Thread(new ThreadStart(MyThreadWork));
        Console.WriteLine("Start a thread...");
        t.Start();
        
        Thread.Sleep(10);
        Console.WriteLine("Abort it...");
        t.Abort();  
      }
      static void MyThreadWork(){
      try{
        for(int i = 0; i <1000 ;i++)
          Console.WriteLine(i.ToString());
        }
        catch(ThreadAbortException ex){
          Console.WriteLine(ex.Message); //actually throw ThreadAbortException
        }
      }
    }
      

  4.   

    我觉得你的这两行代码放反了:
    MvThread.Abort();
    MvThread.Join();
    应该改为:
    MvThread.Join();
    MvThread.Abort();
    Join 是一个阻塞调用,它要到线程实际停止执行后才返回,也就是说等到你线程里面的所有操作全部完成后,你再来调用Abort()来关闭线程,这样就不会有错了,另外,即使在关闭的时候出现了异常,相信也肯定可以捕捉到异常的。当然如果你想同步或者异步来处理多线程间的数据传递那肯定不能用Join()了,:)