一、现象
在C#中调用Halcon,出现异常提示:尝试读取或写入受保护的内存,这通常指示其他内存已损坏。System.AccessViolationException
二、原因
多个线程同时访问Halcon中的某个公共变量,导致程序报错
三、测试
3.1 Halcon代码
其中tsp_width为Halcon中的缓存尺寸,为公共变量,即在线程A变更数据,在线程B也能访问到变更后的数据
private void Test1()
{
HOperatorSet.SetSystem("tsp_width", 500);
}
3.2 多线程调用
多线程进行访问,程序报错
private void button1_Click(object sender, EventArgs e)
{
Task.Run(() => { Test1(); });
Task.Run(() => { Test1(); });
Task.Run(() => { Test1(); });
Task.Run(() => { Test1(); });
}
private void Test1()
{
HOperatorSet.SetSystem("tsp_width", 500);
}
3.3 改善措施
参考多线程访问公共变量方法进行即可