WPF Dispatcher抛出TargetInvocationException

时间:2013-03-14 13:48:39

标签: c# wpf multithreading dispatcher targetinvocationexception

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

    }

1 个答案:

答案 0 :(得分:1)

TargetInvocationException是由反射(according to MSDN)调用的方法引发的异常,并且使用BeginInvoke,您告诉Dispatcher执行此操作。

在传递的委托中抛出的任何异常都包含在TargetInvocationException中。您无法阻止Dispatcher包装原始exeption。尽管如此,您仍然可以访问InnerException来获取原始异常。