首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TargetInvocationException?

TargetInvocationException?
EN

Stack Overflow用户
提问于 2010-05-08 11:44:49
回答 3查看 8.3K关注 0票数 1

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

代码语言:javascript
复制
    private Dispatcher dispatcher = null;

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

在XAML中实例化DownloadManager时,如下所示:

代码语言:javascript
复制
<Window.DataContext>
    <c:DownloadManager />
</Window.DataContext>

注意,调试器不会特别突出显示这些行;我只知道如果删除它们,程序就不会崩溃。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-08 12:55:43

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

最后,VS2010中的XAML编辑器FWIW告诉我,如果我定义了一个像您这样的构造函数,那么如果没有默认的构造函数,我的类型是不可用的。

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

代码语言:javascript
复制
public MyViewModel()
    : this( null ) {
}

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

Stack Overflow用户

发布于 2010-05-08 11:53:24

没有我可以直接看到的,但是如果在InnerException中有,它会显示什么?

票数 1
EN

Stack Overflow用户

发布于 2010-05-08 12:27:32

这只是个建议。你能给这个类添加一个默认的构造函数,看看会发生什么吗?如下所示:

代码语言:javascript
复制
public DownloadManager()
{
   this.dispatcher = Dispatcher.CurrentDispatcher;
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2792867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档