C#调用Halcon出现尝试读取或写入受保护的内存,这通常指示其他内存已损坏。System.AccessViolationException

一、现象

     在C#中调用Halcon,出现异常提示:尝试读取或写入受保护的内存,这通常指示其他内存已损坏。System.AccessViolationException

二、原因

    多个线程同时访问Halcon中的某个公共变量,导致程序报错

三、测试

    3.1 Halcon代码

      其中tsp_width为Halcon中的缓存尺寸

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 改善措施

   参考多线程访问公共变量方法进行即可

上一篇:【小沐学C#】C#文件读写方式汇总-简介


下一篇:YOLOv9改进策略:注意力机制 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点