Составные подписки WPF EventAggregator теряются

В моем приложении Composite WPF у меня есть событие, которое публикуется, когда пользователь дважды щелкает элемент управления. Модули подписываются на событие и при необходимости выполняют действие.

Это событие, похоже, перестает работать случайным образом. Иногда, когда я запускаю приложение, я могу инициировать событие без проблем, в других случаях я могу инициировать его только несколько раз, прежде чем модули перестанут получать событие.

Когда я смотрю в отладчике, CAL EventAggregator все еще имеет событие, но у события нет подписок. Как EventAggregator может терять подписки?


person M. Dudley    schedule 15.07.2009    source источник


Ответы (1)


Оказывается, сборщик мусора удалил подписки. Я должен буду прочитать о внутренностях, но когда я заменил

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

с участием

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

он начал работать. Параметры потока пользовательского интерфейса не были моей проблемой, но для других может быть важно убедиться, что вы также обрабатываете событие в правильном потоке.

person M. Dudley    schedule 15.07.2009
comment
EventAggregator использует слабые ссылки (msdn.microsoft.com/en-us/library/ ms404247.aspx), если только вы явно не запретите это делать. - person M. Dudley; 15.07.2009