进度条和ThreadAbortException

时间:2015-11-17 10:58:52

标签: c# multithreading progress-bar

我有2个表格。带有一些代码的主窗体和带有进度条的2窗体。当主要形式工作时,它变得不可见,第二种形式作为线索:

 Thread pb = new Thread(Show_pb); //Show_pb shows the 2 form with green progress bar
 pb.Start();
 this.ShowInTaskbar = false;
 this.Visible = false;

 //do smth...

  pb.Abort();        
  this.Visible = true;
  this.ShowInTaskbar = true;
  this.Activate();

毕竟有时会引发异常:

  

线程被中止

如果我在try..catch中创建Show_pb,它会每次都抛出它:

    try
    {
        Form2 f_pb = new Form2();
        f_pb.ShowDialog();
        f_pb.Activate();
    }
    catch (Exception ex)
    {
        throw ex;
    }

但我无法处理系统抛出的异常。我应该更改什么或如何处理此异常?

1 个答案:

答案 0 :(得分:2)

请参阅ThreadAbortException Class上的文档:

  

当调用Abort方法来销毁一个线程时,   公共语言运行库抛出ThreadAbortException。   ThreadAbortException是一个可以捕获的特殊异常,但它   将在catch块结束时自动再次引发。

您无法有效捕获此异常。

首先,除非整个应用程序正在关闭,否则您不应该致电Thread.Abort 。它还可以使您的应用处于未知状态。

接下来就是你似乎在非UI线程中启动了一些UI。那很糟。你真的不应该这样做。

正确的方法是在后台线程中运行您的计算并将更新封送回UI以更新进度条。