当前位置:  开发笔记 > 编程语言 > 正文

显示对话框时"线程被中止"异常

如何解决《显示对话框时"线程被中止"异常》经验,为你挑选了1个好方法。

在我的应用程序中,我有一个显示一段时间"请等待"对话窗口的线程,有时这是一个非常小的时间,并且绘制UI时有一些小故障(我猜).

我得到了异常"线程被中止"并且完全不知道如何摆脱它.我的意思是以某种方式捕获异常,或者以某种其他方式将其隐藏在用户之外.此异常与我的应用程序的其余部分无关,并且该错误以任何方式不会影响它.随机出现,很难在通话中重新创建.

我尝试以各种方式通过代码来捕获该异常,该代码使用对话框窗口启动和停止线程,但似乎错误显然是在我新创建的线程中显示窗口的其他线程.

这是一个代码示例,静态类的一部分,有用的东西,当然我不是说这是解决这种"忙"情况的好方法,但我想解决这个问题.Thread.sleep代码(500); 或其他try/catch改进并没有帮助我避免该线程异常.

    public static bool alreadyBusy = false;
    public static BusyIndicator bi = new BusyIndicator("");
    public static Thread backgroundOpertionThread;

    public static void showBusy(bool isBusy, System.Windows.Forms.Form hostform, string message)
    {
        Common.busyMessage = message;
        if (isBusy)
        {
            Common.alreadyBusy = true;
            backgroundOpertionThread = new Thread(new ThreadStart(showBusy));
            Thread.Sleep(500);
            if (hostform != null)
            {
                hostform.Enabled = false;
                hostform.SuspendLayout();
            }
            backgroundOpertionThread.Start();

        }
        else
        {

            backgroundOpertionThread.Abort();
            Thread.Sleep(500);
            Common.alreadyBusy = false;
            if (hostform != null)
            {
                hostform.Enabled = true;
                hostform.ResumeLayout();
            }
        }
    }

    public static void showBusy()
    {
        BusyIndicator bir = new BusyIndicator(Common.busyMessage);
        bir.ShowDialog();
    }

有任何想法吗?



1> angry person..:

千万不能使用Thread.Abort的.当.NET运行时需要强制终止线程以卸载程序时,保留此方法.

如果您要卸载AppDomain并且想要首先删除在其中运行的线程,则只能"安全地"使用它.

要删除线程,请以协作模式写入.这意味着线程应该定期检查某种标志,如果设置了标志,则通常退出线程方法.要"杀死"线程,只需设置标志并等待线程退出.

您可以为此标志使用Event-object或简单的boolean变量.

但是不要使用Thread.Abort.


+1.只是为了强调:*不要使用Thread.Abort!*:-)
如果一个线程实际上能够连续可靠地检查标志的值(例如在循环中),那么优雅的线程退出方法是好的,但是当线程执行"繁重的"任务并被锁定时该怎么办?单行代码?Thread.Abort()是我知道在这种情况下终止线程的唯一方法.还有其他办法吗?
我想看看Bosco的问题.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有