1. 剪贴板复制异常(AOT 崩溃 / 调试抛 COM 异常)
问题现象
根因定位
将async Task改为void修复,Avalonia文档其实有说明:
Avalonia作为桌面UI框架,对主线程的SynchronizationContext(同步上下文)有强依赖,剪贴板、窗口消息循环等系统级操作均需基于稳定的主线程上下文执行。
-
async Task Main会让CLR以异步方式管理主线程生命周期,破坏Avalonia初始化的同步上下文,导致剪贴板操作时触发CoInitialize未调用的COM异常; - Avalonia官方文档明确说明:应用入口阶段(Main函数)不应依赖未就绪的
SynchronizationContext,因此入口函数必须为同步。
项目使用Dock控件(VS风格布局,document等价于TabControl的TabItem),在document中嵌入DataGrid展示数据:
-
运行环境为Win7/Windows Server 2019,Win10同事反馈也卡;
-
排查过程
- 初期怀疑
DataGrid使用方式问题:优化列绑定(仅单向绑定)、移除复杂样式/动画,卡顿无明显改善; -
这里要明确,TreeDataGrid已被Avalonia放入商用套件中
Semi提供的配套主题库对应版本为11.1.1.1
Avalonia的老组件(如DataGrid)在老系统(Win7/Server)+AOT发布环境下易暴露性能问题,优先选择官方新组件可减少踩坑,切记:及时更新最新控件库。
最后感谢Avalonia交流群的群友提供的解决方案,开源社区的交流总能快速定位这类“反直觉”的问题~
- 初期怀疑
