C# 在类销毁期间运行方法
我有一个MVVM项目,需要在VM被销毁时运行一些方法。我正在尝试这个: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
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创建另一个问题。