当前位置: 首页 > news >正文

UI线程用到COM只能选单线程模型

无论用不用UI库,哪怕是用Win32 API手搓UI,UI线程要用COM的话,必须初始化为单线程单元(STA),即CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);,不能用MULTITHREADTHREADED。

实际上,很多(WPF等)UI库若用多线程模型初始化COM,都会直接抛异常。经实测,纯Win32 API (注①)搞UI虽无明确要求,但若用多线程模型初始化COM,会抛一个WinRT Originate Error 0x80040155 (注②),小概率出现画UI画不上的问题(注③),改为单线程模型初始化COM则两问题一并解决。


注解:
① 实际上还用了DirectX,但应该和DX没啥关系,因为DX支持多线程。
② 我这个项目实际上并没有用WinRT,但还是报这个错。错误代码对应信息为“没有注册接口”。
③ 具体为啥画不上,我调试半天也没搞清楚。只知道这问题与上述WinRT Error有较高相关性,于是我转而用每次稳定出现的WinRT Error作为出问题的信号,调试发现这问题出在一切DX绘图工作顺利完成之后。由此猜测是Windows为了创建UI或干啥的自己调用了一些COM接口,这些COM只支持单线程模型。如有知明确原因的大佬,还望不吝赐教。

http://www.lryc.cn/news/530821.html

相关文章:

  • LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略
  • 在C语言中使用条件变量实现线程同步
  • 图书管理系统 Axios 源码__新增图书
  • Maven全解析:从基础到精通的实战指南
  • 数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱
  • python算法和数据结构刷题[5]:动态规划
  • Ollama+OpenWebUI部署本地大模型
  • Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍
  • 【网络】传输层协议TCP(重点)
  • 海思ISP开发说明
  • 实验十 Servlet(一)
  • doris:聚合模型的导入更新
  • Java NIO_非阻塞I/O的实现与优化
  • 代码随想录算法训练营Day51 | 101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿
  • Games202Lecture 6 Real-time Environment Mapping
  • 在 Zemax 中使用布尔对象创建光学光圈
  • MySQL知识点总结(十八)
  • [论文总结] 深度学习在农业领域应用论文笔记14
  • MySQL和Redis的区别
  • Rust 中的注释使用指南
  • 2025年2月2日(tcp3次握手4次挥手)
  • 一文了解制造业中的QC是什么
  • 【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口
  • 在CentOS服务器上部署DeepSeek R1
  • 算法随笔_36: 复写零
  • MoonBit 编译器(留档学习)
  • 使用 DeepSeek-R1 与 AnythingLLM 搭建本地知识库
  • 网络工程师 (13)时间管理
  • 【xdoj-离散线上练习】T251(C++)
  • 定时器按键tim_key模版