时间:2016-11-25 14:00:30

标签: c# wpf prism

我在使用6.2.0的最新稳定版本的wpf应用程序中使用prism

我已设置prism以在视图模型上使用IRegionMemberLifetime接口,并将KeepAlive属性设置为返回false。在视图模型中,当它创建时,我使用以下代码注册到IEventAggregator事件。

EventAggregator.GetEvent<NewLayerSetEnabledEvent>().Subscribe(NewLayersetEnabledAction);

我遇到的问题是,在从视图导航后,视图模型仍然存在,当我发布事件时,也会调用其他视图。有没有办法强制视图在导航后被GC处理掉,或者我需要在调用OnNavigatedFrom事件时取消订阅事件。

1 个答案:

答案 0 :(得分:0)

关于.Net CLR中的垃圾收集器,您必须始终牢记的重要一点是,您(通常)不知道它何时运行。 (当然,您可以强制垃圾收集器使用GC.Collect()方法等运行,但这是一个例外,不应过度使用 - 请参阅this srticle)。

所以记住这一点,你永远无法确定,当你的观点将被GC化时。一般来说,它可能仍然存在一段时间,甚至可以存活直到应用程序关闭(参见Generation 2)。

如果您想确保已关闭视图的视图模型不再对EventAggregator引发的事件做出积极反应,则必须在删除视图后取消订阅所有事件。