wpf - WPF 多线程如何工作?

标签 wpf multithreading dispatcher

我知道 WPF 中多线程的基本构建 block ,但我确实有一个让我很困惑的问题。

WPF 应用程序从两个线程开始:

one for handling rendering and another for managing the UI.



这听起来不错,但是 UI 线程困扰着我, UI 线程只不过是一个应用程序线程

The thread that creates a WPF UI element owns the elements and other threads can not interact with the UI elements directly,this is known as thread affinity.



说,我的应用程序中有两个文本框和一个按钮,每个文本框都有自己的调度程序对象 ,点击按钮我将用值更新文本框,希望这将由 完成用户界面线程 .

1.现在,我的问题是UI线程是应用程序线程,按钮 会有自己的调度程序对象 两个文本框 会有自己的调度程序对象 , 这个UI线程怎么有自己的调度程序对象 和这些 UI 控件不同的是 DispatcherObject 可以更新文本框吗?
  • 我的另一个问题是,如果在后台线程中创建新文本框,那么我可以从 UI 线程更新此文本框吗?

  • 请纠正我的理解,我无法继续。

    最佳答案

    每个 DispatcherObject 都与一个 UI 线程相关联。只有那个线程可以访问那个特定的 DispatcherObject。在一个结构合理的 WPF 应用程序中,只有一个 UI 线程。所有元素都在那里创建和访问。

    您可以拥有多个具有不同元素集的 UI 线程,但这将是一个深奥的场景,会带来很多问题。

    If create new textbox in Background thread



    该文本框将绑定(bind)到后台线程,并且只能在那里使用。因此,您无法将其挂接到主元素树中。这将是无用的。

    关于wpf - WPF 多线程如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828637/

    相关文章:

    c# - 碰撞检测实现

    c# - 在 WPF 中为部分透明图像着色

    java - 如何取消android studio中的特定线程?

    c# - 更新布局时出现“System.ArithmeticException”

    c# - 为什么关闭在单元测试中创建的窗口会引发 InvalidComObjectException?

    WPF 不可空数据绑定(bind)默认清除文本框?

    wpf - 我应该使用哪个范围将 DbContext 与 WPF 应用程序中的 Ninject 绑定(bind)

    python - 处理两个传入数据流并将它们组合在 python 中?

    ios - 单例属性根据调用返回不同的值

    c# - 在 WPF 应用程序中使用 C# 调度程序