2009-07-15 13 views
4

Dans mon application WPF composite, un événement est publié lorsque l'utilisateur double-clique sur un contrôle. Les modules s'abonnent à l'événement et effectuent une action si nécessaire.Les abonnements WPF EventAggregator composites sont perdus

Cet événement semble cesser de fonctionner au hasard. Parfois, lorsque je lance l'application, je peux déclencher l'événement sans problème, d'autres fois je ne peux le déclencher que quelques fois avant que les modules cessent de recevoir l'événement.

Lorsque je regarde dans le débogueur, le CAL EventAggregator a toujours l'événement, mais l'événement n'a aucun abonnement. Comment EventAggregator peut-il perdre des abonnements?

Répondre

4

Il s'avère que c'était le garbage collector qui supprimait les abonnements. Je vais devoir lire sur les entrailles, mais quand je l'ai remplacé

this.mEventAggregator.GetEvent<SomeEvent>().Subscribe(SomeFunction); 

avec

this.mEventAggregator.GetEvent<SomeEvent>().Subscribe(
    SomeFunction, ThreadOption.UIThread, true); 

il a commencé à travailler. Les paramètres des threads de l'interface utilisateur n'étaient pas mon problème, mais pour d'autres, il peut être important de vous assurer que vous gérez l'événement sur le bon thread.

+1

L'EventAggregator utilise des références faibles (http://msdn.microsoft.com/en-us/library/ms404247.aspx) sauf si vous lui avez explicitement interdit de le faire. –