偶尔的线程中止异常

时间:2018-02-06 12:17:31

标签: c# .net multithreading threadabortexception thread-abort

我从以前的开发人员那里继承了一些代码,并且应用程序在执行某项任务时偶尔会给出一个线程中止异常。

    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并且线程在完成时自行关闭?

1 个答案:

答案 0 :(得分:1)

您正在anotehr线程上打开表单?这是一个非常糟糕的设计。

通常所有表单都应该由GUI线程创建。如果anotehr线程需要编写soemthing,那就是Invoke的用途。

在没有向我们展示在线程中运行的实际代码(可能包含在OpenForm()中)中,我们无法帮助您进行调试。

虽然我可以理解为什么程序员使用这个快捷方式(做空闲动画可能需要额外的线程,取决于显而易见的技术),我仍然觉得这是一个糟糕的设计应该重做。