相关疑难解决方法(0)

我什么时候应该创建一个析构函数?

例如:

public class Person
{
    public Person()
    {
    }

    ~Person()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我什么时候应该手动创建析构函数?什么时候需要创建析构函数?

c# destructor

177
推荐指数
4
解决办法
12万
查看次数

如何在C#/ MVVM应用程序中解决莫名其妙的ObjectDisposedExceptions?

我编写了我的第一个MVVM应用程序.当我关闭应用程序时,我常常因ObjectDisposedException而导致崩溃.应用程序窗口消失后,应用程序即将崩溃.

获取堆栈跟踪很困难(参见我的另一个问题),但最后我做了,发现我的堆栈跟踪完全包含在C#库中(kernel32!BaseThreadStart,mscorwks!Thread,mscorwks!WKS等).

此外,这种崩溃是不一致的.在我上次结账和重建之后,它停止了一段时间.然后它又回来了.一旦它开始发生,它就会不断发生,即使我"清理"并重建.但擦拭和结账有时会使它停止一段时间.

我认为发生了什么:

我认为GarbageCollector在处理我的ViewModel时做的很有趣.我的ViewModelBase类析构函数在调用析构函数时有一个WriteLine来记录,而我的4个ViewModel中只有2或3个被处理掉了,它似乎根据结账而变化(例如,当我在我的运行时,我看到一直在重复顺序,但我的同事看到不同的序列与不同的对象处置).

由于堆栈跟踪没有我的代码调用,我认为这意味着我的代码不是调用被处置对象的方法.所以这让我觉得CLR是愚蠢的.

这有意义吗?有什么方法可以让GC保持一致吗?这是红鲱鱼吗?

其他可能
有用的细节:我的所有Views和ViewModel都是在App.xaml.cs文件的Application的Startup事件处理程序中创建的.同一个处理程序将ViewModels分配给DataContexts.我不确定这是否是正确的MVVM实践(正如我所说的,我的第一个MVVM应用程序),但我不明白为什么它会导致不良行为.

如有必要,我可以粘贴代码.

c# garbage-collection mvvm objectdisposedexception

2
推荐指数
1
解决办法
773
查看次数