wpf - 当Shell使用Prism6 for WPF关闭所有相关ViewModel时,如何正确调用Dispose函数来清理资源?
问题描述
在几个视图模型中调用相关 Dispose 函数的正确方法是什么,以确保在关闭 shell 窗口之前成功释放这些资源(对象)?我在 WFP 应用程序中使用 Prism (v6)。
试图在 shell 视图的代码隐藏文件中注册 shell_viewmodel,然后在 shell 的关闭事件上触发所有订阅的 viewmodel 的 pubsub 事件,但遗憾的是 pubsub 事件从未被触发,所以 viewmodels 中的资源没有被处置。
背后的逻辑,我需要为几个模块注册一个 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
}
推荐阅读
- java - 特殊字符问题:MQ 消息 PUT 错误:java.nio.charset.UnmappableCharacterException
- css - 媒体查询括号条件
- c# - 将数据从组合框和文本框插入 Datagridview 到特定行
- javascript - WooCommerce 加载更多按钮功能问题
- c# - 如何发送 HL7 ACK 消息作为 TCP 响应?
- django-rest-framework - 在将数据保存到数据库之前如何自定义 CreateModelMixin
- javascript - HTML Canvas 间隔,CanvasPattern 消失
- flutter - 从背景滤镜中移除白色阴影
- reactjs - 如何用鼠标移动而不是鼠标点击来移动相机
- git - 如何将文件恢复到以前的版本