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

时间:2013-10-07 09:36:04

标签: c# wpf multithreading winforms

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

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

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

2-在catch块中使用了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

1 个答案:

答案 0 :(得分:0)

这就是我接近它的方式。 将调用放在等待对话框中,例如

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

然后在validate按钮的click事件中调用此方法

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