首页 > 解决方案 > 当Shell使用Prism6 for WPF关闭所有相关ViewModel时,如何正确调用Dispose函数来清理资源?

问题描述

在几个视图模型中调用相关 Dispose 函数的正确方法是什么,以确保在关闭 shell 窗口之前成功释放这些资源(对象)?我在 WFP 应用程序中使用 Prism (v6)。

试图在 shell 视图的代码隐藏文件中注册 shell_viewmodel,然后在 shell 的关闭事件上触发所有订阅的 viewmodel 的 pubsub 事件,但遗憾的是 pubsub 事件从未被触发,所以 viewmodels 中的资源没有被处置。

背后的逻辑,我需要为几个模块注册一个 SQLTableDependency (SQLBroker) 并希望关闭它们,即在 shell 关闭之前删除数据库侦听器。

对此有任何想法吗?我真的在为此苦苦挣扎……

标签: wpfprismviewmodeldispose

解决方案


您可以使用Application.OnExit来发布事件。您必须从引导程序中获取容器实例并将其存储,当然,以将事件聚合器解析为OnExit.

例子:

internal partial class App
{
    protected override void OnStartup( StartupEventArgs e )
    {
        base.OnStartup( e );

        _bootstrapper = new MyBootstrapper();
        _bootstrapper.Run();
    }

    protected override void OnExit( ExitEventArgs e )
    {
        base.OnExit( e );

        _bootstrapper.Container.Resolve<IEventAggregator>().GetEvent<ApplicationExitingEvent>().Publish();
    }

    #region private
    private Bootstrapper _bootstrapper;
    #endregion
}

推荐阅读