2
我的调试器出现问题,当在UI中执行错误的代码时线程调试器正确指出错误行,当它在线程内执行时也是如此,但调用器在调用时表现得有点奇怪在调度程序中:在反汇编中引发TargetInvocationException。WPF Dispatcher抛出TargetInvocationException
我怎样才能正确显示它,并避免这个烦人的消息?
下面是一个简单的例子,说明了这个问题:,利用BeginInvoke
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";
}));
}
感谢您的解释,是否有解决方法?另一种从线程修改UI元素并仍然能够正常工作的方法? – jeN 2013-03-14 14:05:47
@jeN调试器仍然正常工作,您只需展开TargetInvocationException上的InnerException属性即可。如果你发现异常,你可以用InnerException来做任何你想做的事情,这就是你所追求的。但重新抛出InnerException会抹掉它的StackTrace,这可能不是你想要的。 – Botz3000 2013-03-14 14:13:32
我的意思是“dubugger工作不正常”,是因为我看不到调用堆栈中的原始异常,我看不到变量的值,异常被targetinvocationexception吸收。如果我使用AsyncTask Istead,会遇到这种问题吗? – jeN 2013-03-14 14:29:30