gpt4 book ai didi

c# - Thread.Abort() 导致应用程序被杀死

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:16 25 4
gpt4 key购买 nike

我正在开发一个 wpf 应用程序,如果正在进行一些冗长的工作,它会向用户显示等待对话框。我已将等待对话框创建为从 System.Windows.Forms.Form 继承的 Windows 窗体。当用户更改某些设置并应用时,我会显示此等待对话框并让应用程序验证并保存新配置。为了显示这个对话框,我创建了一个线程并调用了一个方法,该方法又调用了 waitdialog 形式的 ShowDialog() 方法。验证并保存设置后,我需要隐藏/取消此 waitdialog 表单。因此,Thread.Abort() 用于中止显示等待对话框的线程。

这样,当用户点击 Apply 按钮保存新配置时,等待对话框会正确显示和隐藏,如果用户输入错误,则会显示一个消息框。现在,如果用户再次单击应用按钮,应用程序会显示一个未处理的异常消息框,指出“线程正在中止”。为了解决这个问题,我使用了以下方法:

1- 将 Thread.Abort() 语句放入 try/catch block 中。

2- 在 catch block 中使用了 Thread.ResetAbort() 语句。

3- 在应用程序启动时订阅不同的事件:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
AppDomain.CurrentDomain.FirstChanceException += new EventHandler<System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs>(CurrentDomain_FirstChanceException);
this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

我仍然无法吃掉那个异常。请提出一些方法来解决这个问题。因为它会导致奇怪的异常并终止应用程序。

Exception

最佳答案

这就是我处理它的方式。在方法中调用等待对话框,例如

FORMWAITDIALOG _waitDialog=new FORMWAITDIALOG();
void ShowDialog(){
Thread t = new Thread(()=>{
Invoke(new Action(()=>
{
_waitDialog.show();
}));
});
t.start();
}

然后在验证按钮的点击事件中调用这个方法

然后在退出方法中调用_waitDialog.hide();

关于c# - Thread.Abort() 导致应用程序被杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19221366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com