7

ClassAの以下のコードを使用して、プリズムイベントをサブスクライブおよびサブスクライブ解除しています。私が抱えている問題は、サブスクライブを解除した後、同じイベントに対して異なるハンドラーレジスターを持つ別の完全に異なるクラス(ClassBなど)が引き続き呼び出されることです。どうしてこれなの?

トークンを使用したサブスクライブ解除と、登録時に使用したメソッドデリゲートの両方を試しましたが、どちらも役に立ちませんでした。

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);
4

2 に答える 2

3

購読の呼び出しで匿名の方法を使用したため、購読解除はそこでは機能しないと思います。別の方法でサブスクライブするコードを移動して、サブスクライブ/サブスクライブ解除/サブスクライブ解除してみてください。

于 2013-03-20T13:10:22.493 に答える
0

ここのサブスクリプショントークンコードについてはわかりません。

ただし、次のようにイベントをサブスクライブおよびサブスクライブ解除できます。

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

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

わたしにはできる。

于 2012-11-19T10:56:40.997 に答える