我的MVVM Light应用程序中的ViewModel有一些资源,必须在应用程序关闭时进行处理。我在ViewModelLocator中有CleanUp方法来做。我的应用程序中调用CleanUp方法的位置在哪里。
public class ViewModelLocator
{
/// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return SimpleIoc.Default.GetInstance<MainViewModel>();
}
}
public static void Cleanup()
{
var main=SimpleIoc.Default.GetInstance<MainViewModel>();
main.Dispose();
}
}
public class MainViewModel:ViewModelBase, IDisposable
{
public void Dispose()
{
disposableResoure.Dispose();
}
}
答案 0 :(得分:0)
您可以在Closing
类的Closed
类上使用MainWindow
或Application
事件 - 可能最好使用Closed
事件,因为窗口将会不再可见。
http://msdn.microsoft.com/en-us/library/system.windows.application.mainwindow(v=vs.110).aspx
或者您可以在Exit
课程中使用Application
事件。
http://msdn.microsoft.com/en-us/library/system.windows.application.exit(v=vs.110).aspx
答案 1 :(得分:0)
如果要退出该应用程序,那么为什么要清理所有资源?当进程被拆除时,操作系统将执行此操作。当您不再需要资源时,您想在Dispose()
上调用IDisposable
,以便清理所有非托管资源。如果该过程被淘汰了,则无需调用它,因为在该过程结束后,不会在内存空间中进行垃圾回收。
我同意,在您的Window超出了用户的“范围”之后,不再需要处理资源,但是过程的最后不必这样做。
Here是使用Cleanup()
方法的另一种方式: