TargetInvocationException?

时间:2010-05-08 03:44:49

标签: c# wpf

为什么以下代码行会导致TargetInvocationException异常?

    private Dispatcher dispatcher = null;

    public DownloadManager(Dispatcher dispatcher = null)
    {
        this.dispatcher = dispatcher ?? Dispatcher.CurrentDispatcher;
    }

在XAML中实例化DownloadManager时:

<Window.DataContext>
    <c:DownloadManager />
</Window.DataContext>

请注意,调试器没有特别突出显示任何这些行;我所知道的是,如果我删除它们,我的程序就不会崩溃。

3 个答案:

答案 0 :(得分:3)

要通过XAML实例化对象,它需要有一个公共默认构造函数。具有默认值的参数化构造函数与默认构造函数不同。因此,在尝试实例化对象时,XAML解析器正在死亡。我会说一个带有NullReferenceException的TargetInvocationException,因为内部有点没用,而且更有用的东西可以作为内部抛出。

最后,FWIW,VS2010中的XAML编辑器告诉我,如果我有一个像你这样的构造函数,我的Type在没有默认构造函数的情况下是不可用的。

使用两个构造函数(或仅使用默认构造函数):

public MyViewModel()
    : this( null ) {
}

public MyViewModel( Dispatcher dispatcher = null ) {
    this._dispatcher = dispatcher ?? Dispatcher.CurrentDispatcher;
}

答案 1 :(得分:1)

没有我可以直接看到,但是看看InnerException,如果有的话,它会说什么?

答案 2 :(得分:1)

只是一个建议。你能在类中添加一个默认构造函数,看看会发生什么?像这样:

public DownloadManager()
{
   this.dispatcher = Dispatcher.CurrentDispatcher;
}

我想知道XAML是否不喜欢带有默认值参数的构造函数。