我的调试器有一个问题,当在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";
}));
}发布于 2013-03-14 21:56:58
TargetInvocationException是由反射(according to MSDN)调用的方法抛出的异常,通过使用BeginInvoke,您可以告诉Dispatcher执行此操作。
在传递的委托中抛出的任何异常都包装在TargetInvocationException中。您不能阻止Dispatcher包装原始exeption。不过,您仍然可以通过访问InnerException来获取原始异常。
https://stackoverflow.com/questions/15411125
复制相似问题