为什么以下几行代码会导致TargetInvocationException异常?
private Dispatcher dispatcher = null;
public DownloadManager(Dispatcher dispatcher = null)
{
this.dispatcher = dispatcher ?? Dispatcher.CurrentDispatcher;
}在XAML中实例化DownloadManager时,如下所示:
<Window.DataContext>
<c:DownloadManager />
</Window.DataContext>注意,调试器不会特别突出显示这些行;我只知道如果删除它们,程序就不会崩溃。
发布于 2010-05-08 12:55:43
要通过XAML实例化一个对象,它需要有一个公共的默认构造函数。具有默认值的参数化构造函数与默认构造函数不同。因此,当试图实例化对象时,XAML解析器会死掉。我会说,内部带有NullReferenceException的TargetInvocationException有点没用,可以抛出一些更有用的东西作为内部。
最后,VS2010中的XAML编辑器FWIW告诉我,如果我定义了一个像您这样的构造函数,那么如果没有默认的构造函数,我的类型是不可用的。
改为使用两个构造函数(或仅使用默认构造函数):
public MyViewModel()
: this( null ) {
}
public MyViewModel( Dispatcher dispatcher = null ) {
this._dispatcher = dispatcher ?? Dispatcher.CurrentDispatcher;
}发布于 2010-05-08 11:53:24
没有我可以直接看到的,但是如果在InnerException中有,它会显示什么?
发布于 2010-05-08 12:27:32
这只是个建议。你能给这个类添加一个默认的构造函数,看看会发生什么吗?如下所示:
public DownloadManager()
{
this.dispatcher = Dispatcher.CurrentDispatcher;
}我想知道XAML是否不喜欢参数为默认值的构造函数。
https://stackoverflow.com/questions/2792867
复制相似问题