进度条和ThreadAbortException
本文关键字:ThreadAbortException | 更新日期: 2023-09-27 18:22:09
我有两种形式。带有一些代码的主窗体和带有进度条的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();
毕竟,有时它会抛出一个异常:
线程正在中止
如果我在Show_pb
中创建try..catch
,它每次都会抛出:
try
{
Form2 f_pb = new Form2();
f_pb.ShowDialog();
f_pb.Activate();
}
catch (Exception ex)
{
throw ex;
}
但我无法处理系统抛出的异常。我应该更改什么或如何处理此异常?
请参阅ThreadAbortException class:的文档
当调用Abort方法来销毁线程时公共语言运行库抛出ThreadAbortException。ThreadAbortException是一个可以捕获的特殊异常,但它将在卡块的末端自动再次升高。
您无法有效地捕获此异常。
第一件事是,除非您的整个应用程序都关闭了,否则您永远不应该调用Thread.Abort
。它还可能使您的应用程序处于未知状态。
接下来的事情是,您似乎正在非UI线程中启动一些UI。太糟糕了。你真的不应该那样做。
正确的方法是在后台线程中运行计算,并将更新封送回UI以更新进度条。