2

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

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

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

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);

我仍然无法吃那个例外。请提出一些解决问题的方法。因为它会导致一个奇怪的异常并杀死应用程序。

例外

4

1 回答 1

0

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

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

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

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

于 2014-02-25T06:48:54.617 回答