Windows桌面开发过程中的单实例的事件注册了一定要记得取消

最近用相机窗口做对焦,对焦过程中对焦拍摄的中间数据会更新到UI上面来。很明显我的相机窗口已经创建了,怎么说没创建呢?还不能更新图片,底层报的异常是:在创建窗口句柄之前不能在控件上调用 invoke 或 begininvoke

于是在调用Invoke的地方加了if (this.IsHandleCreated),这样虽然不报错了,但是图像刷新不上啦啊,本质原因还是重复注册了Event. 对焦子系统对外暴露的是一个单列 AutoFocusSystem.我们注册的相机对焦事件的时候在相机窗口

关闭后没有及时取消掉,再次打开对焦相机窗口的时候又注册了一次,而AutoFocusSystem是单实例,每打开一次相机窗口就注册一次事件,当底层对焦事件触发的时候,会依次调用注册的事件,而前面注册事件的相机窗口已经关闭

销毁了,所以在更新这个相机窗口的UI的时候报 窗口句柄之前不能在控件上调用 invoke 或 begininvoke,你都已经销毁掉了,怎么刷新你的窗口UI呢?是不是。最后解决方案如下,完美解决

 

posted @ 2022-11-04 14:44  LearningAlbum  阅读(53)  评论(0)    收藏  举报