2016-04-27 64 views
1

我使用由AppDomain提供的UndhandledException,我所做的基本上是這樣的:如何僅從UnhandledException中獲取消息?

static void Main(string[] args) 
{ 
     AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; 
} 

static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) 
{ 
    e.ExceptionObject.Message? <- there is no message 
    Console.WriteLine(e.ExceptionObject.ToString()); 
    Console.WriteLine("Press a key for exit."); 
    Console.ReadLine(); 
    Environment.Exit(1); 
} 

你怎麼看我無法訪問郵件屬性,但如果我設置一個斷點,我可以請參閱e變量Message屬性,爲什麼我不能使用這個?

+1

也許'如果(e.ExceptionObject是例外){((異常)電子投放。 ExceptionObject).Message; }' – Quantic

+0

啊,所以我需要投它,讓我試試。感謝提示! – IlDrugo

+1

永遠不會*,永遠*,**永遠不會**這樣做。只有e.ExceptionObject.ToString()會產生一個合理的診斷,不會在場上拋出InnerException。 –

回答

5

問題是ExceptionObject是一個對象。你可以將它轉換爲例外,以獲得Message

var exception = (e.ExceptionObject as Exception); 
if (exception != null) 
{ 
    message = exception.Message; 
} 

或MSDN建議,以這種方式

Exception exception = (Exception) e.ExceptionObject; 
var message = exception.Message; 
+0

@Rahul是的,只有當'ExceptionObject'是一個異常時,第一個用'as'纔會執行強制轉換。似乎工作正常,謝謝! – IlDrugo

+0

一個奇怪的情況,如果我這樣做。 'Console.WriteLine(「Message:」+ message);'該消息不被打印。相反,這個工作:'Console.WriteLine(message);' – IlDrugo