Dispatcher.BeginInvoke(...)如何更新WPF中的UI控件?

时间:2011-09-21 11:00:16

标签: wpf wpf-controls dispatcher

我读到Dispatcher.BeginInvoke()将在与ThreadPool的单独线程中运行。

这是对的吗?

如果它是正确的那么我的问题是:如果它运行的是不是UI线程的单独线程,它将如何更新UI?

2 个答案:

答案 0 :(得分:2)

Dispatcher.BeginInvoke计划在 UI线程上调用的操作,并从后台线程调用以更新UI元素。

答案 1 :(得分:1)

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

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