我有2個線程。線程1,具有UserControl和具有委託方法的線程2。在線程2,Control.Invoke()後無法獲得回調()
我)我需要調用線程1上的委託。
二)根據如有異常發生與否,執行一些額外的邏輯
這是我在做什麼。在線程1,控制創作之前,我已經註冊了一個回調
Application.ThreadException += MyUIExceptionHandler();
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
問題1:現在 ,在線程2,當我打電話thread1Control.BeginInvoke(myDelegateMethod, args)
我得到回調MyUIExceptionHandler()
上的發生一個例外,但由於Control.BeginInvoke
是異步的,我不知道在執行上述步驟ii)之前需要等待多少時間。撥打BeginInvoke()
後,簡單的Thread.Sleep(5000)
爲我完成了這項工作,應該以我知道的方式完成。但是,爲了達到這個目標,我還有什麼其他選擇? PS:我無法做任何來自UserControl的通知,因爲我無法控制該代碼!
問題2: 如果我使用thread1Control.Invoke(myDelegateMethod, args)
這是一個同步調用似乎完美地適應該法案,但是當有一個例外,我不明白回調MyUIExceptionHandler()
。爲什麼我不會在這種情況下得到回撥?
Invoke()不會給我異常回調。 BeginIvoke()會。現在,我正在使用BeginInvoke()並使用線程同步。所以,這解決了我的問題,也回答了問題1,但問題2仍然沒有答案。 –
從答案中應該清楚爲什麼會這樣。該線程會重新產生異常。你需要用try/catch來包裝你的Invoke()調用。 –