2012-09-06 36 views
7

Tôi đang đăng ký và hủy đăng ký các sự kiện lăng kính bằng cách sử dụng mã bên dưới trong ClassA. Vấn đề tôi gặp phải là sau Tôi hủy đăng ký và một lớp hoàn toàn khác, ClassB, với một trình đăng ký xử lý khác cho cùng một sự kiện, trình xử lý ClassA vẫn được gọi. Tại sao điều này?Prism Hủy đăng ký với mã thông báo đăng ký không hoạt động

Tôi đã thử cả hủy đăng ký sử dụng mã thông báo cũng như phương thức ủy nhiệm được sử dụng khi đăng ký, cả hai đều không có kết quả.

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

Người đàn ông, tôi đã có cùng một vấn đề này và cuối cùng đã giải quyết nó ... nhưng đó là hơn một năm trước và bây giờ tôi không thể nhớ những gì sửa chữa hoặc làm việc xung quanh. : \ – xanadont

+2

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

+1

SubscriptionToken cũng triển khai IDisposable. Bạn đã cố gắng gọi Dispose thay vì gọi Hủy đăng ký trên EventAggregator? – Jehof

Trả lời

0

Tôi không chắc chắn về mã được viết dưới dạng văn bản ở đây.

Nhưng, chúng tôi có thể đăng ký và huỷ đăng ký sự kiện này như sau:

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

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

Nó làm việc cho tôi.

2

Tôi không nghĩ rằng việc hủy đăng ký có thể hoạt động ở đó vì bạn đã sử dụng một phương pháp ẩn danh trong cuộc gọi Đăng ký của mình. Hãy thử di chuyển mã để đăng ký theo một phương thức riêng và đăng ký/hủy đăng ký/từ đó.

Các vấn đề liên quan