2011-09-21 88 views

回答

2

Dispatcher.BeginInvoke日程表的一个动作被称为上UI线程和由后台线程调用以更新UI元素。

+0

后台线程是指辅助线程? – Syed

+0

是的,后台线程意味着任何线程,但UI线程。 WPF中的UI线程有一个[Dispatcher](http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.aspx),它针对它进行了注册,该工作将针对渲染进行调度。 –

+0

谢谢,但很少有关于“除UI线程之外的任何线程”的说明。将只有一个UI线程,那么辅助线程将如何更新UI线程? – Syed

1

在普通的WPF应用程序中,所有UI对象都与单个调度程序相关联,并且调度程序与单个线程相关联。 BeginInvoke异步地在与调度程序相关联的线程上运行指定的委托(在UI调度程序的情况下,它将成为UI线程)。您只需要从UI线程以外的线程调用BeginInvoke(或Invoke,它与BeginInvoke相同但阻塞)。

如果要从运行在ThreadPool线程中的代码更新UI,请获取对UI调度程序的引用并调用BeginInvoke或Invoke,并将调用传递给UI线程。