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 阅读(389) 评论(0) 收藏 举报
浙公网安备 33010602011771号