海康二次开发学习笔记8-从回调函数获取结果

回调函数使用方法

通常在方案或流程执行完成后,就可以获取到流程运行的结果.运行一次流程后,我们就可以获取到流程的渲染结果以及流程的数据结果.那么使用通讯或硬件进行外部触发时,如何获取结果呢?

这种时候就要用到回调函数.

1. 注释原获取结果代码

在这里插入图片描述

2. 注册回调函数

在构造函数中注册回调函数,所有流程在运行完成后,都会进入这个回调函数.

public Form1()
{
    KillProcess("VisionMasterServerApp");
    KillProcess("VisionMaster");
    KillProcess("VmModuleProxy.exe");
    InitializeComponent();
     //注册回调函数,推荐回调函数获取结果.
    VmSolution.OnWorkStatusEvent += VmSolution_OnWorkStatusEvent;
}

3. 回调函数获取结果

        private void VmSolution_OnWorkStatusEvent(ImvsSdkDefine.IMVS_MODULE_WORK_STAUS workStatusInfo)
        {
            try
            {
                if (workStatusInfo.nWorkStatus==0 && workStatusInfo.nProcessID==10000)//为0表示执行完毕,为1表示正在执行,10000表示流程1
                {
                    //通过流程获取结果,分为渲染结果和数据结果

                    VmProcedure vmProcedure = (VmProcedure)VmSolution.Instance["流程1"];
                    string ocrResult = vmProcedure.ModuResult.GetOutputString("out").astStringVal[0].strValue;
                    string ocrNum = vmProcedure.ModuResult.GetOutputInt("out0").pIntVal[0].ToString();
                    this.BeginInvoke(new Action(() => {//回调里对控件操作需要使用委托
                        vmRenderControl1.ModuleSource = vmProcedure;//渲染结果
                        listBox1.Items.Add("字符识别结果:" + ocrResult);
                        listBox1.TopIndex = listBox1.Items.Count - 1;
                        listBox1.Items.Add("个数:" + ocrNum);
                        listBox1.TopIndex = listBox1.Items.Count - 1;
                    }));

                    //也可以通过模块获取结果
                    IMVSOcrModuCs.IMVSOcrModuTool ocrModuTool = (IMVSOcrModuCs.IMVSOcrModuTool)VmSolution.Instance["流程1.字符识别1"];
                    string ocrScore1 = ocrModuTool.ModuResult.CharNum.ToString();

                }
            }
            catch (VmException ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

4. 运行程序

  1. 运行程序,加载方案

在这里插入图片描述

  1. 方案加载

在这里插入图片描述

  1. 方案执行

在这里插入图片描述

可以看到,对应的流程执行完成后,会进入回调函数,获取结果.图像渲染区和消息区也都显示了结果.

通讯触发及模块列表获取

海康二次开发学习笔记9-通讯触发及模块列表获取

海康相机回调函数可以根据使用情况选择同步回调或异步回调。同步回调是指在调用某个函数时,可以将一个回调函数作为参数传入,被调用的函数在执行完成后会立即调用这个回调函数,完成函数之间的通信。异步回调是指在调用某个函数时,可以将一个回调函数作为参数传入,被调用的函数在执行完成之前不会立即调用这个回调函数,而是在稍后的某个时刻再调用该函数,实现函数之间的异步通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [海康相机回调函数](https://blog.csdn.net/weixin_39899255/article/details/112806249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C语言回调函数demo(帮助理解)以海康isapiExternDemo回调函数为例、回调函数的定义,C/C++同步回调与异步...](https://blog.csdn.net/Dontla/article/details/122531300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值