-1

我从以前的开发人员那里继承了一些代码,该应用程序在执行特定任务时偶尔会出现线程中止异常。

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

4

1 回答 1

1

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

通常所有的表单都应该由 GUI 线程创建。如果 anotehr 线程需要编写一些东西,那就是Invoke的用武之地。

如果不向我们展示在线程中运行的实际代码(大概包含在 OpenForm() 中),我们根本无法帮助您进行调试。

虽然我可以理解程序员为什么使用这个快捷方式(根据 Dispaly 技术,做空闲动画可能需要额外的线程),但我仍然认为这是一个糟糕的设计,应该重新设计。

于 2018-02-06T12:25:43.530 回答