HWindowControl多线程显示异常
直接多线程访问,可能会出现显示异常的情况,代码如下
Task.Run(() => { HOperatorSet.SetWindowParam(hWindowControl1.HalconWindow, "flush", "false"); HOperatorSet.ClearWindow(hWindowControl1.HalconWindow); HObject ho_Rectangle; HOperatorSet.GenEmptyObj(out ho_Rectangle); HOperatorSet.GenRectangle1(out ho_Rectangle, 0, 0, 200, 200); hWindowControl1.HalconWindow.SetColor("red"); hWindowControl1.HalconWindow.DispObj(ho_Rectangle); ho_Rectangle.Dispose(); HOperatorSet.FlushBuffer(hWindowControl1.HalconWindow); });
正确方式,应该使用委托, 代码如下:
Task.Run(() => { if (hWindowControl1.InvokeRequired) { hWindowControl1.BeginInvoke(new Action(() => { //HOperatorSet.SetSystem("flush_graphic", "false"); HOperatorSet.SetWindowParam(hWindowControl1.HalconWindow, "flush", "false"); HObject ho_Rectangle; HOperatorSet.GenEmptyObj(out ho_Rectangle); HOperatorSet.GenRectangle1(out ho_Rectangle, 0, 0, 600, 600); hWindowControl1.HalconWindow.SetColor("red"); hWindowControl1.HalconWindow.DispObj(ho_Rectangle); ho_Rectangle.Dispose(); HOperatorSet.FlushBuffer(hWindowControl1.HalconWindow); })); } });
有参数的代码如下
private void button4_Click(object sender, EventArgs e) { Task.Run(() => { if (hWindowControl1.InvokeRequired) { Func<int, bool> fun1 = Fun1; IAsyncResult ar = hWindowControl1.BeginInvoke(fun1, 0); Debug.Print("Wait handle"); //ar.AsyncWaitHandle.WaitOne(-1, false); Debug.Print(" handle"); //if ((bool)hWindowControl1.EndInvoke(ar)) // Debug.Print("True"); //else // Debug.Print("False"); } else { Debug.Print("同步"); Fun1(0); } Debug.Print("End"); }); } private bool Fun1(int k) { //HOperatorSet.SetSystem("flush_graphic", "false"); HOperatorSet.SetWindowParam(hWindowControl1.HalconWindow, "flush", "false"); HObject ho_Rectangle; HOperatorSet.GenEmptyObj(out ho_Rectangle); HOperatorSet.GenRectangle1(out ho_Rectangle, 0, 0, 600, 600); hWindowControl1.HalconWindow.SetColor("red"); hWindowControl1.HalconWindow.DispObj(ho_Rectangle); ho_Rectangle.Dispose(); HOperatorSet.FlushBuffer(hWindowControl1.HalconWindow); Thread.Sleep(5000); Debug.Print(k.ToString()); return false; }
posted on 2022-08-10 11:26 qq1151219115 阅读(336) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南