小编err*_*404的帖子

如何编辑WPF应用程序的MainWindow构造函数?

我的mainWindow需要订阅一个对象的一些事件.在创建MainWindow之前初始化对象.我想通过它的构造函数将此对象传递给mainWindow.

但是我无法弄清楚MainWindow构造函数的调用位置.可替换地我试图经由主窗口的成员函数来传递对象,但app.MainWindownullapp.Run()被调用.在app.Run()调用之后,代码在程序终止之前不会返回.

另一个可能性是将对象存储在静态类中并具有MainWindow访问权限,但这似乎不必要地复杂化.

我意识到我可以在MainWindow构造函数中创建对象,但这意味着必须在那里放置很多其他代码,几乎整个Main函数.

如何将此对象传递给我的MainWindow?或者MainWindow构造函数是否可以作为整个程序的"Main"?

c# wpf

16
推荐指数
1
解决办法
1万
查看次数

通过动态引用访问嵌套类的成员时出现StackOverflowException

我已经定义了一个派生自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)

c# generics dynamic

16
推荐指数
1
解决办法
662
查看次数

标签 统计

c# ×2

dynamic ×1

generics ×1

wpf ×1