【问题标题】:Prism Unsubscribe with subscription token not workingPrism 取消订阅,订阅令牌不起作用
【发布时间】:2012-09-06 22:48:00
【问题描述】:

我正在使用 ClassA 中的以下代码订阅和取消订阅 prism 事件。我遇到的问题是我取消订阅后,另一个完全不同的类,比如 ClassB,为同一事件注册了不同的处理程序,仍然调用 ClassA 处理程序。这是为什么呢?

我尝试过使用令牌退订以及注册时使用的方法委托,均无济于事。

SubscriptionToken _subscriptionToken;

//register subscription + handler
var pevent = GetEventAggregator().GetEvent<PriceSubscriptionEvent>();
_subscriptionToken = pevent.Subscribe(r =>
{
    DataHandler(r);
    return;
}, ThreadOption.BackgroundThread, false, null);

//Unsubscribe
var pevent = GetEventAggregator().GetEvent<PriceSubscriptionEvent>();
pevent.Unsubscribe(_subscriptionToken);

【问题讨论】:

  • 伙计,我遇到了同样的问题并最终解决了它......但那是一年多以前的事了,现在我不记得修复或解决方法是什么了。 :\
  • SubscriptionToken 也实现了 IDisposable。您是否尝试在 EventAggregator 上调用 Dispose 而不是取消订阅?
  • 仅供参考:我们这里不做“ping”,以后请不要这样做。

标签: c# .net prism


【解决方案1】:

我不认为取消订阅可以在那里工作,因为您在订阅调用中使用了匿名方法。尝试将订阅代码移动到单独的方法中,然后订阅/取消订阅/取消订阅。

【讨论】:

    【解决方案2】:

    我不确定这里的订阅令牌代码。

    但是,我们可以按如下方式订阅和取消订阅该事件:

    evenaggregator.GetEvent<EventName>().Subscribe(eventhandler);
    

    evenaggregator.GetEvent<EventName>().Unsubscribe(eventhandler);
    

    它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多