我的mainWindow需要订阅一个对象的一些事件.在创建MainWindow之前初始化对象.我想通过它的构造函数将此对象传递给mainWindow.
但是我无法弄清楚MainWindow构造函数的调用位置.可替换地我试图经由主窗口的成员函数来传递对象,但app.MainWindow被null前app.Run()被调用.在app.Run()调用之后,代码在程序终止之前不会返回.
另一个可能性是将对象存储在静态类中并具有MainWindow访问权限,但这似乎不必要地复杂化.
我意识到我可以在MainWindow构造函数中创建对象,但这意味着必须在那里放置很多其他代码,几乎整个Main函数.
如何将此对象传递给我的MainWindow?或者MainWindow构造函数是否可以作为整个程序的"Main"?
我已经定义了一个派生自BindingList的泛型类,并且有一个嵌套的非泛型类:
class Generic<T> : BindingList<Generic<T>.Inner>
{
public class Inner
{
public object Foo { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
StackOverflowException当尝试Value通过动态引用访问属性时,mscorlib中出现A ,如下所示:
dynamic d = new Generic<string>.Inner();
var value = d.Foo; // StackOverflowException
var value = d.Bar // StackOverflowException as well, not a
// 'RuntimeBinderException' like you would expect when
// trying to access a non-existing member
Run Code Online (Sandbox Code Playgroud)
这是我能够制作的最小的复制品.
如果我将其更改List为程序正确执行,则从BindingList派生是一个重要的细节.
为什么会这样?
编辑:
这是调用堆栈的顶部:
[Managed to Native Transition]
mscorlib.dll!System.RuntimeTypeHandle.Instantiate(System.Type[] inst)
mscorlib.dll!System.RuntimeType.MakeGenericType(System.Type[] instantiation)
Microsoft.CSharp.dll!Microsoft.CSharp.RuntimeBinder.Semantics.CType.CalculateAssociatedSystemTypeForAggregate(Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType aggtype)
Microsoft.CSharp.dll!Microsoft.CSharp.RuntimeBinder.Semantics.CType.CalculateAssociatedSystemType(Microsoft.CSharp.RuntimeBinder.Semantics.CType src)
Microsoft.CSharp.dll!Microsoft.CSharp.RuntimeBinder.Semantics.CType.AssociatedSystemType.get()
Microsoft.CSharp.dll!Microsoft.CSharp.RuntimeBinder.Semantics.TypeManager.GetAggregate(Microsoft.CSharp.RuntimeBinder.Semantics.AggregateSymbol …Run Code Online (Sandbox Code Playgroud)