Стоит отметить, что вызов Dispatcher.BeginInvoke
не статический вызов: это неявный this.Dispatcher.BeginInvoke
. Если вы можете использовать этот вызов, вы, вероятно, уже пишете свой код из элемента управления или окна. В этом случае вы можете , вероятно, безопасно звонить, поскольку в большинстве случаев для каждого приложения будет один поток пользовательского интерфейса.
Фактический статический вызов будет Dispatcher.CurrentDispatcher.BeginInvoke
, что означает , а не то, что вы хотите назвать (см. Мой комментарий к ответу Хасана Хана, почему).
РЕДАКТИРОВАТЬ: Вызов Application.Current.Dispatcher
это не плохо. (И, для ясности, это свойство экземпляра, а не статическое - вызывается для статического / одноэлементного экземпляра Application
.) Это свойство возвращает Dispatcher для потока, с которым было создано приложение, и обычно это поток что пользовательский интерфейс создан на aswell - поэтому Application.Current.Dispatcher
возвращает тот же Диспетчер, что и myWindow.Dispatcher
.
Статический вызов Dispatcher.CurrentDispatcher
(против которого я предупрежден) возвращает Dispatcher для потока, из которого он вызывается. Если вы вызываете его из фонового потока, вы получите новый Dispatcher, созданный специально для этого потока - что часто не то, что нужно.