2013-10-07 144 views
2

我正在開發一個wpf應用程序,該應用程序在用戶正在進行一些冗長的工作時向用戶顯示等待對話框。我創建了一個等待對話框,作爲從System.Windows.Forms.Form繼承的窗體。當用戶改變一些設置並應用時,我顯示這個waitdialog並讓應用程序驗證並保存新的配置。爲了顯示這個對話框,我創建了一個線程並調用一個方法,該方法依次調用waitdialog窗體的ShowDialog()方法。當設置被驗證並保存時,我需要隱藏/消除這個waitdialog表單。所以,Thread.Abort()用於中止顯示waitdialog的線程。Thread.Abort()導致應用程序終止

這樣,當用戶點擊應用按鈕保存新配置時,等待對話框顯示並正確隱藏,並且如果用戶輸入了錯誤的條目,則會顯示一個消息框。現在,如果用戶再次點擊應用按鈕,應用程序將顯示一個未處理的異常消息框,指出「線程正在中止」。爲了解決這個問題,我使用了下面的代碼:

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

+5

哇的單擊事件。 'Thread.Abort'來隱藏表單?你爲什麼不使用'Show'而不是'ShowDialog',然後調用'Close'或'Hide'? –

+1

不要使用Thread.Abort()...我會推薦使用具有取消標記的任務,而不是直接使用線程... –

+8

'Thread.Abort()'應該真的被命名爲'Thread.CreateNastyBug()'.. –

回答

0

這是我怎麼會走近它。 把呼叫等待對話框中的方法如

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

,然後在驗證按鈕調用此方法

然後在退出方法調用_waitDialog.hide();

相關問題