Mor*_*aos 5 .net c# multithreading .net-2.0
在我的应用程序中,我有一个显示一段时间"请等待"对话窗口的线程,有时这是一个非常小的时间,并且绘制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();
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
ang*_*son 15
千万不能使用Thread.Abort的.当.NET运行时需要强制终止线程以卸载程序时,保留此方法.
如果您要卸载AppDomain并且想要首先删除在其中运行的线程,则只能"安全地"使用它.
要删除线程,请以协作模式写入.这意味着线程应该定期检查某种标志,如果设置了标志,则通常退出线程方法.要"杀死"线程,只需设置标志并等待线程退出.
您可以为此标志使用Event-object或简单的boolean变量.
但是不要使用Thread.Abort.
| 归档时间: |
|
| 查看次数: |
14746 次 |
| 最近记录: |