WPF/Silverlight Tips: Коварное статическое свойствоDispatcher.CurrentDispatcher - не используйте.

Не используйте свойство Dispatcher.CurrentDispatcher!!!
Или - используйте его по назначению, что фактически означает - "не используйте его никогда, чтоб не попасть в просак".

Вместо него нужно использовать
В WPF - Application.Current.Dispatcher.
В Silverlight - Deployment.Current.Dispatcher.

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

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

Универсальное решение для всех фреймворков
SynchronizationContext.Current

Комментарии

Популярные сообщения из этого блога

A4tech. Мышь не найдена. Пожалуйста, подсоедините мышь.

SVN: Пропали иконки TortoiseSVN.

Вывод в cmd или bat пустой строки.