#multithreading #caliburn.micro #eventaggregator #background-thread
#многопоточность #caliburn.micro #eventaggregator #фоновый поток
Вопрос:
Кто-нибудь может объяснить какую-либо причину, почему и когда я должен использовать PublishOnBackgroundThread вместо PublishOnUIThread.
Я не могу найти какие-либо варианты использования для использования PublishOnBackgroundThread, и я не уверен, какой метод мне следует использовать?
Ответ №1:
Это действительно зависит от типа публикуемого сообщения.
Если вы используете EventAggregator для отправки сообщения из низкоуровневой службы обратно в пользовательский интерфейс, тогда PublishOnUIThread имеет наибольший смысл, поскольку вы будете обновлять пользовательский интерфейс при обработке сообщения. То же самое применяется, когда вы используете его для обмена данными между моделями представления.
И наоборот, иногда он используется для моделей представления для публикации событий, которые прослушивает базовая служба (а не модель представления, зависящая от этой службы).
Эта служба может выполнять некоторую дорогостоящую работу, которая имеет смысл выполнять в фоновом потоке. Лично я бы включил фоновую службу, чтобы перенести эту работу в фоновый поток, но разные люди хотят разные варианты.
В конечном итоге метод был включен для полноты.
Комментарии:
1. Спасибо за объяснение.
2. Я сам задаюсь этим вопросом. У меня есть служба (wcf), которая публикует несколько событий, и мои viewmodels прослушивают их и соответствующим образом обновляют представление. Должен ли я всегда использовать PublishOnUIThread в этом случае? Если я публикую onbackgroundthread и использую
Caliburn.Micro.Execute.OnUIThread
метод при обработке события, получаю ли я что-нибудь от этого или это то же самое, что публикация в потоке пользовательского интерфейса?3. Если все, что вы делаете, это используете привязки для обновления пользовательского интерфейса, то это может не иметь значения, поскольку Caliburn автоматически проверяет, что уведомления о свойствах происходят в потоке пользовательского интерфейса. Я не могу вспомнить поведение OnBackgroundThread в верхней части моей головы, но если он запускает новый поток для публикации, то это чистый убыток. Я бы рекомендовал использовать OnUIThread .