我的调试器有问题,当在UI线程中执行错误的代码时,调试器正确地指出了错误的行,在线程内部执行时也是如此,但在调度程序中调用它时表现得有些奇怪:反汇编中抛出了TargetInvocationException。
我怎样才能正确显示它并避免这个恼人的消息?
这是一个说明问题的简单示例:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//navigator.NavigatToMenuAccueil(true);
//Throws NullPointerException
/*String x = null;
String y = x.ToUpper();*/
Thread th = new Thread(DoWork);
th.Start();
}
private void DoWork()
{
//Throws NullPointerException
/*String x = null;
String y = x.ToUpper();*/
Thread.Sleep(1000);
Dispatcher.BeginInvoke(new Action(() =>
{
//Throws TargetInnvocationException
/*
String x = null;
String y = x.ToUpper();
*/
MyTextBlock.Text = "My New Text";
}));
}
答案 0 :(得分:1)
TargetInvocationException
是由反射(according to MSDN)调用的方法引发的异常,并且使用BeginInvoke
,您告诉Dispatcher
执行此操作。
在传递的委托中抛出的任何异常都包含在TargetInvocationException
中。您无法阻止Dispatcher包装原始exeption。尽管如此,您仍然可以访问InnerException
来获取原始异常。