c# - WPF 调度程序抛出 TargetInvocableException

标签 c# wpf multithreading dispatcher targetinvocationexception

我的调试器有问题,当在 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/

相关文章:

c# - 获取当前 Cardboard 头部位置的替代方法

wpf - 使用 DataBinding 将 WPF UserControl 绘制到图像

c# - 在类名前加上可能在命名空间中的多余名称

c# - 无法在 WPF 圆形按钮 (XAML) 中获取边框

c# - 从一个 ViewModel 访问另一个 ViewModel 中的属性

Python 多进程/线程循环。

c - 线程 : signal SIGABRT (lldb) and program ended with exit code -1

c# - 多线程系统.Windows.图形

c# - 如何修复 'The name ' WebSecurity“在当前上下文中不存在”?

c# - Topshelf 中托管的 WCF 服务需要很长时间才能关闭