我读到Dispatcher.BeginInvoke()将在与ThreadPool的单独线程中运行。
这是对的吗?
如果它是正确的那么我的问题是:如果它运行的是不是UI线程的单独线程,它将如何更新UI?
答案 0 :(得分:2)
Dispatcher.BeginInvoke
计划在 UI线程上调用的操作,并从后台线程调用以更新UI元素。
答案 1 :(得分:1)
在普通的WPF应用程序中,所有UI对象都与单个调度程序相关联,并且调度程序与单个线程相关联。 BeginInvoke在与调度程序关联的线程上异步运行指定的委托(在UI调度程序的情况下,它将是UI线程)。您只需要从UI线程以外的线程调用BeginInvoke(或者与BeginInvoke相同但是阻塞的Invoke)。
如果要从ThreadPool线程中运行的代码更新UI,请获取对UI调度程序的引用并调用BeginInvoke或Invoke,它会将调用传输到UI线程。