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

发布于 2024-12-06 00:37:53 字数 131 浏览 1 评论 0原文

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

正确吗?

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

I read that Dispatcher.BeginInvoke() will run in a separate thread from ThreadPool.

Is it correct?

If it is correct then my question is: If it running is separate thread which is not UI thread, how it will update the UI?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

彼岸花ソ最美的依靠 2024-12-13 00:37:53

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

Dispatcher.BeginInvoke schedules an action to be called on the UI thread and is called from a background thread to update UI elements.

陌路终见情 2024-12-13 00:37:53

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

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

In ordinary WPF application all UI objects are associated with a single dispatcher and the dispatcher is associated with a single thread. BeginInvoke asynchronously runs a specified delegate on the thread associated with the dispatcher (in the case of a UI dispatcher it will be the UI thread). You only need to call BeginInvoke (or the Invoke which is same as BeginInvoke but blocking) from a thread other than the UI thread.

If you want to update UI from a code running in a ThreadPool's thread, get the reference to the UI dispatcher and call BeginInvoke or Invoke and it will transfer the call to the UI thread.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文