我正在使用FirstChanceException事件記錄有關任何拋出異常的詳細信息。AppDomain.FirstChanceException和堆棧溢出異常
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
Console.WriteLine("Inside first chance exception.");
};
throw new Exception("Exception thrown in main.");
}
這個按預期工作。但是,如果在事件處理程序中引發異常,則會發生堆棧溢出,因爲事件將以遞歸方式引發。
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
throw new Exception("Stackoverflow");
};
throw new Exception("Exception thrown in main.");
}
如何處理事件處理程序中發生的異常?
編輯:
有幾個答案提示我包裹在一個try/catch塊的事件處理程序中的代碼,但是這並不工作,因爲該事件引發的異常可以處理了。
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
try
{
throw new Exception("Stackoverflow");
}
catch
{
}
};
throw new Exception("Exception thrown in main.");
}
只需使用一個布爾領域,以防止遞歸。 –
我不明白你爲什麼要這樣做。第一次機會例外處理。爲什麼你會拋出另一個呢? – leppie
我不是故意投擲另一個。如果我試圖記錄該錯誤並且在嘗試記錄該信息時引發異常,會發生什麼情況? – nivlam