可用的棱镜后视导航从
问题描述:
我使用的6.2.0可用的棱镜后视导航从
最新的稳定版本我已经安装的棱镜使用IRegionMemberLifetime
接口视图模型,并设置KeepAlive
属性使用棱镜在WPF应用程序返回false。在视图模型中,创建时使用以下代码注册到IEventAggregator
事件。
EventAggregator.GetEvent<NewLayerSetEnabledEvent>().Subscribe(NewLayersetEnabledAction);
的问题,我有是我从视图导航后,视图模型依然存在,当我发布这个事件另一种观点也被调用。有没有办法强制视图在GC导航后被处理掉,或者是否需要在调用OnNavigatedFrom
事件时取消订阅事件。
答
重要的是,您必须时刻牢记.NET CLR中的垃圾收集器,事实上您(通常)不知道它究竟运行的时间。 (当然,您可以强制垃圾收集器使用GC.Collect()
方法等运行,但这是一个例外,不应过度使用 - 请参阅this srticle)。
所以记住这一点,当你的视图被GC化时,你永远无法确定。一般来说,它可能还活着一段时间,甚至在应用程序关闭之前仍然存活(请参阅Generation 2)。
如果您想确保您的已关闭视图的视图模型不再主动地对由EventAggregator
引发的事件作出反应,您必须取消订阅视图删除后的所有事件。