Dispatcher.CurrentDispatcher vs. Application.Current.Dispatcher

Каковы различия между Dispatcher.CurrentDispatcherSystem.Windows.Threading ) и Application.Current.DispatcherSystem.Windows )?

Мой кишок говорит мне, что Application.Current.Dispatcher никогда не изменится и будет глобальным для всех streamов в текущем приложении, а Dispatcher.CurrentDispatcher может создать новый экземпляр Dispatcher зависимости от streamа, из которого он был вызван.

Это верно?

Если это так, является целью Dispatcher.CurrentDispatcher первую очередь для многопоточного пользовательского интерфейса?

3 Solutions collect form web for “Dispatcher.CurrentDispatcher vs. Application.Current.Dispatcher”

Мой кишок говорит мне, что Application.Current.Dispatcher никогда не изменится и будет глобальным для всех streamов в текущем приложении, а Dispatcher.CurrentDispatcher может создать новый экземпляр Диспетчера в зависимости от streamа, из которого он был вызван.

Это верно.

Кроме того, нет никакого смысла в доступе к Dispatcher.CurrentDispatcher из streamа, отличного от UI. Он ничего не сделает, если вы не вызовете Dispatcher.Run , и переход в бесконечный цикл сообщений – это не то, что вы хотите делать из рабочих streamов.

Так:

  • В наиболее распространенном сценарии , где ваше приложение имеет только один stream пользовательского интерфейса, Application.Current.Dispatcher и Dispatcher.CurrentDispatcher из streamа пользовательского интерфейса возвращают один и тот же экземпляр. Какой из них вы используете, это просто вопрос предпочтения.

  • Если ваше приложение имеет более одного streamа пользовательского интерфейса, каждый DispatcherObject будет постоянно связан с диспетчером streamа пользовательского интерфейса, который был создан при построении. В этом случае Application.Current.Dispatcher будет ссылаться на диспетчера streamа, к которому применяется ваше приложение; вы не сможете использовать его для публикации сообщений на элементы управления, принадлежащие другим вашим streamам пользовательского интерфейса.

Проще говоря…

Dispatcher.CurrentDispatcher получает диспетчер для текущего streamа . Итак, если вы ищете Диспетчер streamов пользовательского интерфейса из фонового процесса, не используйте это.

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

Мой кишок говорит мне, что Application.Current.Dispatcher никогда не изменится и будет глобальным для всех streamов в текущем приложении, а Dispatcher.CurrentDispatcher может создать новый экземпляр Диспетчера в зависимости от streamа, из которого он был вызван.

Это верно, Application.Current.Dispatcher – это свойство экземпляра приложения, которое назначается при построении диспетчером текущего streamа. И в документации Dispatcher.CurrentDispatcher указывается:

Получает диспетчер для текущего streamа и создает новый диспетчер, если он еще не связан с streamом.


Если это так, является целью Dispatcher.CurrentDispatcher в первую очередь для многопоточного пользовательского интерфейса?

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

Interesting Posts

Отдельные регуляторы громкости для наушников и динамиков в Windows 7

При входе в систему, как мне заставить Windows автоматически подключаться к подключенному сетевому диску?

Что такое NetBIOS? Нужно ли Windows открыть порты 137 и 138?

Разница между полями и маркой вида

Как исправить мой USB-накопитель, чтобы вернуть его первоначальный размер 8 ГБ?

Получить компонент Swing по имени

Что означают два знака вопроса в C #?

Метод-цепочка в C #

Отличие локального и удаленного доступа в оболочке (связанный с TERM)

Как выйти из общей папки Windows?

Конкат два файла mp4 с ffmpeg без потери качества

Ошибка Node.JS: ENOSPC

C # получить эскиз из файла через windows api

Плохое качество изображения после изменения размера / масштабирования растрового изображения

«Неверное строковое значение» при попытке вставить UTF-8 в MySQL через JDBC?

Давайте будем гением компьютера.