我的调试器有一个问题,当错误的代码在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";
}));
}
TargetInvocationException
是由反射调用的方法抛出的异常(根据MSDN),并且通过使用BeginInvoke
,您告诉Dispatcher
这样做。
在传递的委托中抛出的任何异常都被包装在TargetInvocationException
中。您无法阻止Dispatcher包装原始异常。但是,您仍然可以通过访问InnerException
来获得原始异常。