2012-09-06 14 views
7

ClassA'da aşağıdaki kodu kullanarak prizma olaylarına abone oluyorum ve aboneliği iptal ediyorum. Sorunum,'dan sonra aboneliği iptal ediyorum ve aynı olay için farklı bir işleyici kaydeder başka bir tamamen farklı sınıf, ClassB, ClassA işleyicisi hala çağrılır. Bu neden?Prism Abonelik belirteci ile abonelikten çıkma Not

boşuna bir belirteç olarak kayıt esnasında kullanılan yöntem temsilci, her ikisini de kullanarak hem listesinden çıkma çalıştılar.

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); 
+0

Adamım, bende aynı sorun vardı ve sonunda çözdüm ... ama bu bir yıl önce bitti ve şimdi ne yapılacağını ya da çalışmanın ne olduğunu hatırlayamıyorum. : \ – xanadont

+2

http://stackoverflow.com/questions/4310663/wpf-prism-event-subcriptions-not-dying – xanadont

+1

SubscriptionToken ayrıca IDisposable uygular. EventAggregator'da Aboneliği iptal etmek yerine Dispose'ı kullanmaya çalıştınız mı? – Jehof

cevap

0

Burada abonelik koduyla ilgili emin değilim.

Ama biz abone ve etkinliği şu şekilde abonelikten çıkabilirsiniz:

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

ve

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

Bana uyar.

2

Abonelik Aboneliği çağrınızda anonim bir yöntem kullandığınızdan Aboneliğin orada çalışabileceğini sanmıyorum. Abone için kodu ayrı bir yöntemde taşımayı deneyin ve abone olun/aboneliğinden çıkın.