我在使用6.2.0的最新稳定版本的wpf应用程序中使用prism
我已设置prism以在视图模型上使用IRegionMemberLifetime
接口,并将KeepAlive
属性设置为返回false。在视图模型中,当它创建时,我使用以下代码注册到IEventAggregator
事件。
EventAggregator.GetEvent<NewLayerSetEnabledEvent>().Subscribe(NewLayersetEnabledAction);
我遇到的问题是,在从视图导航后,视图模型仍然存在,当我发布事件时,也会调用其他视图。有没有办法强制视图在导航后被GC处理掉,或者我需要在调用OnNavigatedFrom
事件时取消订阅事件。
答案 0 :(得分:0)
关于.Net CLR中的垃圾收集器,您必须始终牢记的重要一点是,您(通常)不知道它何时运行。 (当然,您可以强制垃圾收集器使用GC.Collect()
方法等运行,但这是一个例外,不应过度使用 - 请参阅this srticle)。
所以记住这一点,你永远无法确定,当你的观点将被GC化时。一般来说,它可能仍然存在一段时间,甚至可以存活直到应用程序关闭(参见Generation 2)。
如果您想确保已关闭视图的视图模型不再对EventAggregator
引发的事件做出积极反应,则必须在删除视图后取消订阅所有事件。