首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CleanUp ViewModelLocator的最佳实践

CleanUp ViewModelLocator的最佳实践
EN

Stack Overflow用户
提问于 2014-07-22 12:37:08
回答 2查看 3.3K关注 0票数 3

我的MVVM Light应用程序中的ViewModel有一些资源,这些资源必须在应用程序关闭时进行处理。我在ViewModelLocator中有CleanUp方法来做这件事。在我的应用程序中调用CleanUp方法的正确位置。

代码语言:javascript
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-07-22 17:48:19

您可以在Application类的MainWindow类上使用ClosingClosed事件-最好使用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

票数 1
EN

Stack Overflow用户

发布于 2018-08-31 08:30:30

如果您要退出应用程序,为什么还要清理资源呢?当进程终止时,操作系统将执行此操作。当您不再需要某个资源时,您希望在IDisposable上调用Dispose(),以便可以清理所有非托管资源。如果进程被丢弃,那么就没有必要调用它,因为在进程被丢弃之后,内存空间中不会发生垃圾收集。

我同意在您的窗口已经超出用户的“范围”并且不再需要之后处理资源,但是过程的结束是不必要的。

Here是使用Cleanup()方法的另一种方式:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24879019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档