微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当 Shell 使用 Prism6 for WPF 关闭所有相关的 ViewModel 时,如何正确调用 Dispose 函数来清理资源?

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

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

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

背后的逻辑,我需要为几个模块注册一个 sqlTableDependency (sqlbroker) 并想关闭它们,在 shell 关闭之前数据库侦听器正在被删除

对此有什么想法吗?我真的很纠结这个...

解决方法

您可以使用 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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。