繁体   English   中英

偶尔线程中止异常

[英]Occasional thread abort exception

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

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

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

通常所有的表单都应该由 GUI 线程创建。 如果某个线程需要写一些东西,那是Invoke 的目的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM