Какой поток выполняет зарегистрированное действие - PullRequest
1 голос
/ 30 августа 2011

В коде моей главной страницы я регистрируюсь для определенных сообщений, таких как:

Messenger.Default.Register<String>(this, Notifications.ShowAlert, ShowAlertAction);

Как вы можете себе представить, ShowAlertAction работает с некоторым пользовательским интерфейсом (в этом случае появляется дочернее окно)

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

1 Ответ

1 голос
/ 31 августа 2011

Messenger не отправляет в другой поток. Так что это правильно, действие выполняется в потоке отправителя, что может вызвать исключение между потоками. Чтобы избежать этого, рекомендуется использовать класс DispatcherHelper для отправки сообщения в основной поток, даже если ваш отправитель работает в фоновом потоке.

Некоторые другие фреймворки осуществляют диспетчеризацию автоматически (например, Prism), но API сложен и запутан. Я предпочел простой подход.

Приветствие Laurent

...