C#子線程拋出的異常給主線程


前幾天在修改記賬程序,把導入數據的那部分改了一下,改為用線程操作,這樣導入數據多的時候主界面不會出現假死狀態。
在原來的代碼里面有一些try{}catch{}的異常處理代碼,在加入子線程的時候這些代碼也留着,想通過throw把異常拋出到主線程來。在測試時發現,子線程無法將異常拋出給主線程,程序報錯了。於是上網查了些資料,得知線程之間是不可能發生異常處理的交換關系的。
所以解決辦法就是用委托來處理子線程的異常
定義如下委托

private delegate void ChildThreadExceptionHandler(string message);
private event ChildThreadExceptionHandler ChildThreadException;
protected virtual void OnChildThreadException(string message)
{
if (ChildThreadException != null)
ChildThreadException(message);
}

在線程啟動前綁定事件

ChildThreadException = null;
ChildThreadException += new ChildThreadExceptionHandler(Import_ChildThreadException);
Thread thread = new Thread(ImportThreadMethod);
thread.Start();

在子線程出現異常的地方調用OnChildThreadException(ex.Message)就可以了。
Import_ChildThreadException就是具體的處理異常的方法了,彈出對話框或是什么別的就看你的需求了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM