2016-04-27 101 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