【发布时间】:2018-02-06 12:17:31
【问题描述】:
我从以前的开发人员那里继承了一些代码,应用程序在执行特定任务时偶尔会出现线程中止异常。
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 并且线程在完成时会自行关闭?
【问题讨论】:
-
为什么你觉得你现在需要
Abort电话? -
我想知道这是如何“偶尔”发生的,因为您每次都强制中止线程。
-
-
该代码有很多 WTF,从令人担忧的繁忙等待循环,到在后台线程中创建令人讨厌的表单,再到对
Thread.Abort()的彻头彻尾的攻击性调用。我敢打赌fromflag也没有被声明为volatile(不应该这样——应该重写代码以避免完全出现繁忙的循环)。无论如何:应该为表单本身提供一种知道何时关闭自身的方法,而不是使用Thread.Abort()。 -
我认为“扔掉它,从头开始”真的是最好的方法!
标签: c# .net multithreading threadabortexception thread-abort