我想處理異常,但它不起作用! 最新的問題?如何處理System.Threading.Timer中的異常
讓我們說在Main中我使用任何參數運行SetUpTimer。
private void SetUpTimer(TimeSpan alertTime, string name)
{
DateTime current = DateTime.Now;
TimeSpan timeToGo = alertTime - current.TimeOfDay;
try
{
Timer timer = new Timer(x => RunReportTask(name),null, timeToGo, Timeout.InfiniteTimeSpan));
catch(Exception e)
{
Console.WriteLine("Log Exception....")
}
}
private void RunReportTask(string name)
{
Console.WriteLine("\r\n\r\nSTART Task \t\tReport: " + name);
//DELAY 25 sec
Task.Delay(25000);
if (name.Equals("Report A") || name.Equals("Report D") || name.Equals("Report F"))
{
throw new Exception("Task failed!!!");
}
else
{
Console.WriteLine("Task: \t\t" + name + "\tDONE.");
}
}
所以現在如果我執行它會拋出一個異常與報告名稱A,D,F。但它不會抓住它,但爲什麼?我能做些什麼呢?
您是嘗試/捕獲僅創建計時器,操作的不執行。你可以把所有的代碼放在try/catch中的Action「RunReportTask」中,或者你可以在你的應用中註冊一個[uncaughtExceptionHandler](https://csharp.2000things.com/tag/unhandled-exceptions/)。 – Fildor
將try/catch放在拋出異常的同一個方法中是沒有意義的,但這就是所有可以用你發佈的代碼完成的方法。據推測,隨着更多的信息,它將清楚你如何處理錯誤,但這些信息不在這裏,所以這個問題有太多可能的答案。 –