異常不可避免,所有地方都寫try...catch也麻煩,所以有了未處理異常的處理的東東,分別為以下三個事件:
system.threading.tasks.taskscheduler.unobservedtaskexception:occurs when a faulted task's unobserved exception is about to trigger exception escalation policy(出錯的任務中未觀察到的異常將觸發該事件)。在task被垃圾**的時候,析構函式檢測到該task物件還有未被處理過的異常,會丟擲這個異常並觸發,所以感覺總是慢一拍。
第1、2個事件很好理解,在ui執行緒和任務執行緒throw new excepiton("測試")都能測試出來,第3個事件我是折騰好久才找到觸發的地方——比如在1、2事件的方法中又發生了異常,所以也可以理解1、2事件都有引數和方法可以設定成已處理(e.handled=true、e.setobserved()),第3個事件一被觸發,game over。
最後附上我的**
using system;
using system.text;
using system.threading.tasks;
using system.windows;
namespace l3_exception
/// /// 非主線程錯誤
///
///
///
private static void taskscheduler_unobservedtaskexception(object sender, unobservedtaskexceptioneventargs e)
來自:");
}e.setobserved();
restart("task exception", sb.tostring());
}///
///
///
private static void currentdomain_unhandledexception(object sender, unhandledexceptioneventargs e)
內部異常內容:
來自:");
}catch
restart("domain exception", sb.tostring());
}/// /// 主線程錯誤
///
///
///
private static void current_dispatcherunhandledexception(object sender, system.windows.threading.dispatcherunhandledexceptioneventargs e)
內部異常內容:
來自:");
e.handled = true;
restart("主線程異常", sb.tostring());
}private static void restart(string title, string content)
}}
C WinForm捕獲未處理的異常
using system using system.collections.generic using system.windows.forms using system.io namespace gobalexception r n異常訊息 r n異常資訊 r n ex.gettype name,...
C WinForm捕獲未處理的異常
像qq那樣,當程式出現崩潰強制退出之前,捕獲該異常,跳出友好介面進行提示。只需在program.cs 裡加相關 即可實現,全域性任何乙個點出現崩潰,都將在這裡 獲。static class program catch exception ex n異常訊息 n異常位置 n error.gettype ...
C WinForm捕獲未處理的異常
像qq那樣,當程式出現崩潰強制退出之前,捕獲該異常,跳出友好介面進行提示。只需在program.cs 裡加相關 即可實現,全域性任何乙個點出現崩潰,都將在這裡 獲。static class program catch exception ex static void object sender,sy...