我有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;
}
但我无法处理系统抛出的异常。我应该更改什么或如何处理此异常?
答案 0 :(得分:2)
请参阅ThreadAbortException Class上的文档:
当调用Abort方法来销毁一个线程时, 公共语言运行库抛出ThreadAbortException。 ThreadAbortException是一个可以捕获的特殊异常,但它 将在catch块结束时自动再次引发。
您无法有效捕获此异常。
首先,除非整个应用程序正在关闭,否则您不应该致电Thread.Abort
。它还可以使您的应用处于未知状态。
接下来就是你似乎在非UI线程中启动了一些UI。那很糟。你真的不应该这样做。
正确的方法是在后台线程中运行您的计算并将更新封送回UI以更新进度条。