2

我的调试器有问题,当在 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";
        }));            

    }
4

1 回答 1

2

TargetInvocationException是由反射调用的方法引发的异常(根据 MSDN),并且通过 using BeginInvoke,您正在告诉Dispatcher这样做。

在传递的委托中抛出的任何异常都包含在TargetInvocationException. 您不能阻止 Dispatcher 包装原始异常。您仍然可以通过访问获得原始异常InnerException

于 2013-03-14T13:56:58.317 回答