WPF Dispatcher throws 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";
        }));            
    }

TargetInvocationException是由反射调用的方法抛出的异常(根据MSDN),并且通过使用BeginInvoke,您告诉Dispatcher这样做。

在传递的委托中抛出的任何异常都被包装在TargetInvocationException中。您无法阻止Dispatcher包装原始异常。但是,您仍然可以通过访问InnerException来获得原始异常。

相关内容

  • 没有找到相关文章

最新更新