我从以前的开发人员那里继承了一些代码,并且应用程序在执行某项任务时偶尔会给出一个线程中止异常。
private void popup()
{
Thread th = new Thread(() =>
{
try
{
OpenForm();
}
catch (ThreadAbortException ex)
{
Console.WriteLine("Thread was forcibly aborted");
}
});
th.Start();
while (fromflag)
{
}
th.Abort();
}
线程打开一个带有动画加载gif的弹出窗口,从服务器下载文件然后完成。完成后我将fromflag设置为false。 我无法设置计时器,因为下载文件可能需要一段时间。
我怎么能以不同的方式写这些内容然后我不必使用th.Abort并且线程在完成时自行关闭?
答案 0 :(得分:1)
您正在anotehr线程上打开表单?这是一个非常糟糕的设计。
通常所有表单都应该由GUI线程创建。如果anotehr线程需要编写soemthing,那就是Invoke的用途。
在没有向我们展示在线程中运行的实际代码(可能包含在OpenForm()中)中,我们无法帮助您进行调试。
虽然我可以理解为什么程序员使用这个快捷方式(做空闲动画可能需要额外的线程,取决于显而易见的技术),我仍然觉得这是一个糟糕的设计应该重做。