2016-04-27 2 views
1

Я использую UndhandledException предоставленную AppDomain, что я сделал, по существу, это:Как получить только сообщение из 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 является Exception) {((Exception) е. ExceptionObject) .message; } ' – Quantic

+0

А, так что мне нужно бросить его, позвольте мне попробовать. Спасибо за подсказку! – IlDrugo

+1

Никогда, * никогда *, ** никогда ** не делайте этого. Только e.ExceptionObject.ToString() создает разумную диагностику, которая не оставляет, скажем, InnerException на полу. –

ответ

5

Проблема в том, что ExceptionObject является объектом. Вы можете привести его к Exception, чтобы получить 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 yes the first with 'as' выполняет приведение только в том случае, если исключение является ExceptionObject. Кажется, работает отлично, спасибо! – IlDrugo

+0

Странная ситуация happean, если да. 'Console.WriteLine (сообщение« + сообщение »); сообщение не печатается. Вместо этого это работает: 'Console.WriteLine (message);' – IlDrugo

Смежные вопросы