我的调试器有问题,当在 UI 线程中执行错误代码时,调试器会正确指出错误行,与在线程内执行时相同,但在调度程序内调用时,它的行为有点奇怪:反汇编时会引发 TargetIncationException。
我怎样才能让它正确显示并避免这个恼人的消息?
这是一个说明问题的简单示例:
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
是由反射 ( according to MSDN ) 调用的方法引发的异常,通过使用 BeginInvoke
,您正在告诉 Dispatcher
来做到这一点。
在传递的委托(delegate)内引发的任何异常都包装在 TargetInvocableException
中。您无法阻止调度程序包装原始异常。不过,您仍然可以通过访问 InnerException
来获取原始异常。
关于c# - WPF 调度程序抛出 TargetInvocableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411125/