【发布时间】:2011-10-12 18:30:56
【问题描述】:
我有一个使用 WeakReferences 存储 Action<T> 的事件聚合器。我遇到的问题是我的行为不断被垃圾收集。
以下将失败...
public Foo(IEventAggregator eventAggregator)
{
eventAggregator.Subscribe<BarEvent>(DoNothing)
}
public void DoNothing(BarEvent aEvent) {}
但以下将成功...
private Action<BarEvent> _action;
public Foo(IEventAggregator eventAggregator)
{
_action = DoNothing;
eventAggregator.Subscribe<BarEvent>(_action);
}
public void DoNothing(BarEvent aEvent) {}
显然 _action 变量有助于保持活动,但我有点困惑为什么......更重要的是,有没有办法在没有参考的情况下保持动作?
【问题讨论】:
-
你为什么在这里使用 WeakReferences?他们有点假设您对其他地方的特定项目有非弱参考......
-
因为我不想要 Event Aggr。永远保持周围的东西。我的问题更多.. 如果 Foo 没有被 GC'ed.. 为什么 Action
被 GC'ed?它是否只在创建它的方法的生命周期内存活?