C# 为什么我们需要调用control.invoke? 众所周知,线程共享相同的地址空间。 另外,众所周知,我们不能直接从不同的线程更新UI(我们必须使用控件。调用)。

C# 为什么我们需要调用control.invoke? 众所周知,线程共享相同的地址空间。 另外,众所周知,我们不能直接从不同的线程更新UI(我们必须使用控件。调用)。,c#,multithreading,user-interface,C#,Multithreading,User Interface,所以我的问题是为什么这个UI对象(标签、文本框等)如此特殊?为什么我们可以为普通类设置一些属性或调用一些方法,但不能为UI类设置这些属性或方法?来自MSDN: Windows演示基金会(WPF)是为保存开发人员而设计的 从穿线的困难。因此,大多数WPF 开发人员不必编写使用多个接口的接口 线因为多线程程序很复杂,很难实现 调试时,如果存在单线程解决方案,则应避免使用它们 编辑: 作为对你评论的回答- “你的话解释了什么吗??!” 我觉得很清楚: 你- 我的问题是为什么这个UI对象(标签、文本

所以我的问题是为什么这个UI对象(标签、文本框等)如此特殊?为什么我们可以为普通类设置一些属性或调用一些方法,但不能为UI类设置这些属性或方法?

来自MSDN:

Windows演示基金会(WPF)是为保存开发人员而设计的 从穿线的困难。因此,大多数WPF 开发人员不必编写使用多个接口的接口 线因为多线程程序很复杂,很难实现 调试时,如果存在单线程解决方案,则应避免使用它们

编辑:

作为对你评论的回答-


“你的话解释了什么吗??!”

我觉得很清楚:

你-

我的问题是为什么这个UI对象(标签、文本框等)如此特殊?为什么我们可以为普通类设置一些属性或调用一些方法,但不能为UI类设置这些属性或方法

MSDN-

由于多线程程序复杂且难以调试,因此在存在单线程解决方案时应避免使用多线程程序


我删除了第二段,我没有注意到我也复制了它。

这就是WPF的设计方式。它假定所有UI调用都在同一个线程内。@helb这与WPF本身无关。事实上,windows中的UI元素是COM对象。COM是线程仿射的,这意味着你只能从创建它的线程“触摸它”。看这个问题:你的引用解释了什么吗@失望请看我的编辑。我以为你在问为什么.NET强制使用单线程UI。