Cha*_*ana 8 .net user-interface multithreading
我们知道,除了元素实例化的线程之外的任何线程都不可能执行操作任何UI元素属性的代码...我的问题是:为什么?
我记得当我们使用COM用户界面元素时(在COM/Visual Basic 6.0天内),所有UI元素都是使用COM类和共同类创建的,这些类使用称为Thread-Local-Storage的内存模型来存储其资源(TLS),但我记得,这是必需的,因为与构建COM组件的方式有关,并且不应与.NET UI元素相关.这种限制仍然存在的根本原因是什么?
是因为底层操作系统仍然为所有UI元素使用基于COM的Win32 API类,甚至是在托管.NET应用程序中操作的那些元素?
AFAIK,它甚至比 COM 还要基础。它直接归结为优秀的 Windows API。我相信 Windows 中的窗口应该由一个线程拥有,就这样。每个线程都有自己的消息泵,将消息分派到它拥有的窗口。这是 Windows 的一个非常基本的构造——现在可能有点过时,但很基本。
我的感觉是,当您需要将 WPF 集成到 Windows 窗体应用程序中时,或者如果您需要使用您在某处获得的 HWND 来处理应用程序中其他位置的 Windows 对象时,这种线程亲和力有助于互操作性......它可能它还允许旧版本的 Windows (XP) 托管 WPF 应用程序,而无需对操作系统本身的架构进行任何重大更改。