我们知道,除了实例化元素的线程之外,不可能从任何线程执行操作任何 UI 元素属性的代码...我的问题是:为什么?
我记得当我们使用 COM 用户界面元素时(在 COM/Visual Basic 6.0 时代),所有 UI 元素都是使用 COM 类和协同类创建的,这些类和协同类使用称为“线程本地存储”的内存模型来存储其资源(TLS),但我记得,这是必需的,因为与 COM 组件的构造方式相关,并且不应该与 .NET UI 元素相关。这种限制仍然存在的根本原因是什么?
是否因为底层操作系统仍然对所有 UI 元素(甚至是在托管 .NET 应用程序中操作的元素)使用基于 COM 的 Win32 API 类?
AFAIK,它甚至比 COM 还要基础。它直接归结为优秀的 Windows API。我相信 Windows 中的窗口应该由线程拥有,就这样。每个线程都有自己的消息泵,将消息分派到它拥有的窗口。这是 Windows 的一个非常基本的构造——现在可能有点过时,但很基本。
我的感觉是,当您需要将 WPF 集成到 Windows 窗体应用程序中,或者如果您需要使用您在某处获得的 HWND 来处理应用程序中其他位置的 Windows 对象时,这种线程亲和力有助于互操作性......它可能它还允许旧版本的 Windows (XP) 托管 WPF 应用程序,而无需对操作系统本身的架构进行任何重大更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)