C# 在类销毁期间运行方法

C# 在类销毁期间运行方法,c#,mvvm,C#,Mvvm,我有一个MVVM项目,需要在VM被销毁时运行一些方法。我正在尝试这个: public class MyClass { public void MyCleanUpmethod(object p) { // My Clean up proccess here .... } ~ MyClass() { MyCleanUpmethod(new object()); } } 我的问题是,~MyC

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

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

    ~ MyClass()
    {
        MyCleanUpmethod(new object());
    }
}
我的问题是,
~MyClass()
只在关闭整个应用程序时运行,我需要在当前进程中不再使用MyClass时运行它

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


我该怎么做

您应该看看界面。然后,析构函数代码进入
Dispose
方法,该方法应由您自己的代码调用。或者,您可以使用
using
语句,该语句负责在作用域末尾调用
Dispose
。有关dispose模式的干净实现,请参阅


使用终结器是不合适的,因为它是由垃圾回收器调用的,而垃圾回收器可能不及时(如您的情况)。

不要对托管代码使用析构函数。 而是实现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
}

谢谢你的帮助。但是我怎么才能将
使用
转换成
XAML
?嗯,我不知道:)但是我的猜测是,无论处理XAML的是什么,都知道如何处理实现IDisposable的对象
dispose()
自动触发?或者必须手动触发?Tks。我现在正在阅读这篇文章。关于对dispose方法的调用,这可能会有所帮助。在阅读这篇文章之后,我只想问一个问题:如果我的类实现IDisposble,为什么在关闭窗口时不会自动
dispose
dispose
不会自动调用。相反,实现
IDisposable
是释放资源的最佳实践。您仍然负责调用该方法。也许这能帮到你。我还认为这值得再问一个问题。终结器出现了一些问题;)最好为mvvm创建另一个问题。