我读过Dispatcher.BeginInvoke()将在ThreadPool的一个单独的线程中运行。Dispatcher.BeginInvoke(...)如何更新WPF中的UI控件?
它是正确的吗?
如果它是正确的,那么我的问题是:如果它运行的是单独的线程,而不是UI线程,它将如何更新UI?
我读过Dispatcher.BeginInvoke()将在ThreadPool的一个单独的线程中运行。Dispatcher.BeginInvoke(...)如何更新WPF中的UI控件?
它是正确的吗?
如果它是正确的,那么我的问题是:如果它运行的是单独的线程,而不是UI线程,它将如何更新UI?
Dispatcher.BeginInvoke
日程表的一个动作被称为上UI线程和由后台线程调用以更新UI元素。
在普通的WPF应用程序中,所有UI对象都与单个调度程序相关联,并且调度程序与单个线程相关联。 BeginInvoke异步地在与调度程序相关联的线程上运行指定的委托(在UI调度程序的情况下,它将成为UI线程)。您只需要从UI线程以外的线程调用BeginInvoke(或Invoke,它与BeginInvoke相同但阻塞)。
如果要从运行在ThreadPool线程中的代码更新UI,请获取对UI调度程序的引用并调用BeginInvoke或Invoke,并将调用传递给UI线程。
后台线程是指辅助线程? – Syed
是的,后台线程意味着任何线程,但UI线程。 WPF中的UI线程有一个[Dispatcher](http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.aspx),它针对它进行了注册,该工作将针对渲染进行调度。 –
谢谢,但很少有关于“除UI线程之外的任何线程”的说明。将只有一个UI线程,那么辅助线程将如何更新UI线程? – Syed