Составные подписки на EventAggregator WPF теряются - PullRequest
4 голосов
/ 15 июля 2009

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

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

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

1 Ответ

4 голосов
/ 15 июля 2009

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

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

с

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

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

...