我正在开发一个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);
我仍然无法吃那个例外。请提出一些解决问题的方法。因为它会导致一个已经发生的异常并终止该应用程序。
答案 0 :(得分:0)
这就是我接近它的方式。 将调用放在等待对话框中,例如
FORMWAITDIALOG _waitDialog=new FORMWAITDIALOG();
void ShowDialog(){
Thread t = new Thread(()=>{
Invoke(new Action(()=>
{
_waitDialog.show();
}));
});
t.start();
}
然后在validate按钮的click事件中调用此方法
然后在退出方法中调用_waitDialog.hide();