我的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();
}
}发布于 2014-07-22 17:48:19
您可以在Application类的MainWindow类上使用Closing或Closed事件-最好使用Closed事件,因为窗口将不再可见。
http://msdn.microsoft.com/en-us/library/system.windows.application.mainwindow(v=vs.110).aspx
或者,您可以在Application类上使用Exit事件。
http://msdn.microsoft.com/en-us/library/system.windows.application.exit(v=vs.110).aspx
发布于 2018-08-31 08:30:30
如果您要退出应用程序,为什么还要清理资源呢?当进程终止时,操作系统将执行此操作。当您不再需要某个资源时,您希望在IDisposable上调用Dispose(),以便可以清理所有非托管资源。如果进程被丢弃,那么就没有必要调用它,因为在进程被丢弃之后,内存空间中不会发生垃圾收集。
我同意在您的窗口已经超出用户的“范围”并且不再需要之后处理资源,但是过程的结束是不必要的。
Here是使用Cleanup()方法的另一种方式:
https://stackoverflow.com/questions/24879019
复制相似问题