【发布时间】:2011-09-21 22:50:13
【问题描述】:
我了解到 Dispatcher.BeginInvoke() 将在与 ThreadPool 不同的线程中运行。
对吗?
如果正确,那么我的问题是:如果它运行的是单独的线程而不是 UI 线程,它将如何更新 UI?
【问题讨论】:
标签: wpf wpf-controls dispatcher
我了解到 Dispatcher.BeginInvoke() 将在与 ThreadPool 不同的线程中运行。
对吗?
如果正确,那么我的问题是:如果它运行的是单独的线程而不是 UI 线程,它将如何更新 UI?
【问题讨论】:
标签: wpf wpf-controls dispatcher
Dispatcher.BeginInvoke 安排一个动作在 UI 线程上调用,并从 后台线程 调用以更新 UI 元素。
【讨论】:
在普通的 WPF 应用程序中,所有 UI 对象都与单个调度程序相关联,并且调度程序与单个线程相关联。 BeginInvoke 在与调度程序关联的线程上异步运行指定的委托(在 UI 调度程序的情况下,它将是 UI 线程)。您只需要从 UI 线程以外的线程调用 BeginInvoke(或与 BeginInvoke 相同但阻塞的 Invoke)。
如果您想从 ThreadPool 线程中运行的代码更新 UI,请获取对 UI 调度程序的引用并调用 BeginInvoke 或 Invoke,它将调用转移到 UI 线程。
【讨论】: