当我需要访问UI线程时,我通常只使用 Application.Current.Dispatcher.BeginInvoke(...)
但是有适当的时间来使用 someDependencyObject.Dispatcher.BeginInvoke(...)
我假设在UI线程上创建了所有DependencyObjects / UIElements,因此最终结果应该相同或类似。
电话之间有什么区别(如果有的话)?
是否有关于何时使用其中一个的规则?
答案 0 :(得分:3)
并非所有DispatcherObject
实例都必须在主UI线程上创建(某些应用程序使用每个Window
方法的线程)。
我个人建议使用DispatcherObject.Dispatcher.BeginInvoke
,无论哪个线程创建了实体,代理中DispatcherObject
的使用都会成功。
// Will always work
myTextBox.Dispatcher.BeginInvoke(new Action(myTextBox.Focus));
使用Application.Current.Dispatcher.BeginInvoke
,如果在不同的线程上创建实例,则DispatcherObject
的使用可能会失败。
// May fail if myTextBox was created on a different thread
Application.Current.Dispatcher.BeginInvoke(new Action(myTextBox.Focus));