为什么以下代码行会导致TargetInvocationException
异常?
private Dispatcher dispatcher = null;
public DownloadManager(Dispatcher dispatcher = null)
{
this.dispatcher = dispatcher ?? Dispatcher.CurrentDispatcher;
}
在XAML中实例化DownloadManager
时:
<Window.DataContext>
<c:DownloadManager />
</Window.DataContext>
请注意,调试器没有特别突出显示任何这些行;我所知道的是,如果我删除它们,我的程序就不会崩溃。
答案 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是否不喜欢带有默认值参数的构造函数。