我有一个MVVM项目,需要在VM被销毁时运行一些方法。我正在尝试这个:
public class MyClass
{
public void MyCleanUpmethod(object p)
{
// My Clean up proccess here
....
}
~ MyClass()
{
MyCleanUpmethod(new object());
}
}
我的问题是~ MyClass()
仅在关闭整个应用程序时运行,我需要在当前procces期间不再使用MyClass时运行它。
这意味着如果MyClass
用作Datacontext
窗口~ MyClass()
必须在窗口关闭时运行,如果MyClass
的实例用于其他不同的事情, Datacontext
,~ MyClass()
也必须运行
我该怎么做?
答案 0 :(得分:2)
您应该查看IDisposable
界面。然后,您的析构函数代码将进入Dispose
方法,该方法应由您自己的代码调用。或者,您可以使用using
语句,该语句负责在范围的末尾调用Dispose
。要清楚地实现dispose模式,请查看MSDN article。
使用终结器是不合适的,因为垃圾收集器会调用它,这可能不及时(就像你的情况一样)。
答案 1 :(得分: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
}