2

我有一个 MVVM 项目,需要在 VM 被销毁时运行一些方法。我正在尝试这个:

public class MyClass
{
    public void MyCleanUpmethod(object p)
    {
       // My Clean up proccess here 
       ....
    }       

    ~ MyClass()
    {
        MyCleanUpmethod(new object());
    }
}

我的问题是~ MyClass()只有在关闭整个应用程序时才运行,我需要在当前过程中不再使用 MyClass 时运行它。

这意味着如果MyClass使用 asDatacontext的窗口~ MyClass()必须在窗口关闭时运行,如果一个实例MyClass用于其他不同的事物 as Datacontext~ MyClass()也必须运行

我怎样才能做到这一点 ?

4

2 回答 2

2

你应该看看IDisposable界面。然后,您的析构函数代码进入Dispose应该由您自己的代码调用的方法。或者,您可以使用一个语句,该语句负责在范围结束时using调用。Dispose有关 dispose 模式的干净实现,请查看MSDN 文章

使用终结器是不合适的,因为它是由垃圾收集器调用的,这可能不是及时的(就像你的情况一样)。

于 2013-10-27T15:31:51.073 回答
1

不要将析构函数用于托管代码。而是实现 IDisposable:

public class MyClass : IDisposable
{
    public void MyCleanUpmethod(object p)
    {
       // My Clean up proccess here 
       ....
    }       

    public void Dispose()
    {
        MyCleanUpmethod(new object());
    }
}

然后像这样使用类:

using (var cls = new MyClass())
{
 //do stuff with cls
}
于 2013-10-27T15:33:18.823 回答