CBA
coinitialize(Avalonia剪贴板和DataGrid的问题)

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同事反馈也卡;

  • 排查过程

    1. 初期怀疑 DataGrid使用方式问题:优化列绑定(仅单向绑定)、移除复杂样式/动画,卡顿无明显改善;
    2. 这里要明确,TreeDataGrid已被Avalonia放入商用套件中

      Semi提供的配套主题库对应版本为11.1.1.1

      Avalonia的老组件(如DataGrid)在老系统(Win7/Server)+AOT发布环境下易暴露性能问题,优先选择官方新组件可减少踩坑,切记:及时更新最新控件库。

    最后感谢Avalonia交流群的群友提供的解决方案,开源社区的交流总能快速定位这类“反直觉”的问题~


    顶一下()     踩一下()

热门推荐

发表评论
0评