当前位置:编程学习 > C#/ASP.NET >>

关于C#调用C++函数绑定回调函数后发生CrossThreadMessagingException异常的问题

代码如下: 
       //事件函数原型
        //typedef BRIINT32 (CALLBACK *PCallBack_EventEx)(PBRI_EVENT pEvent,BRIUINT32 dwUserData);
        //事件函数代理
        public delegate Int32 CallbackDelegate(BriSDKLib.TBriEvent_Data eventData, Int32 dwUserData);
        //代理对象
        public static CallbackDelegate callback;

        //事件回调函数
        private  Int32 CallBackEventFunc(BriSDKLib.TBriEvent_Data EventData, Int32 dwUserData)
        {
           
            return 1;
        }
        //打开设备
        private void openDevice()
        {
            try
            {
                if (BriSDKLib.QNV_OpenDevice(BriSDKLib.ODT_LBRIDGE, 0, "") <= 0 || BriSDKLib.QNV_DevInfo(0, BriSDKLib.QNV_DEVINFO_GETCHANNELS) <= 0)
                {
                    this.AppendStatus("设备状态:打开设备失败。");
                    MessageBox.Show("设备状态:打开设备失败。");
                    return;
                }

                for (Int16 i = 0; i < BriSDKLib.QNV_DevInfo(-1, BriSDKLib.QNV_DEVINFO_GETCHANNELS); i++)
                {
                    //绑定事件
                    callback = CallBackEventFunc;
                    int tmp = BriSDKLib.QNV_Event(i, BriSDKLib.QNV_EVENT_REGCBFUNCEX, 0, callback, null, 0);
                    BriSDKLib.QNV_CloseDevice(BriSDKLib.ODT_CC, 0);
                }

            } 
            catch (Exception ex) 
            {

            }
        }

第一次触发事件时正常,但第二次触发事件时就抛出CrossThreadMessagingException。
请各位高手们帮忙分析下是什么地方错了。
C# 异常 callback --------------------编程问答--------------------

应是线程中调用了控件了吧,要用委托 --------------------编程问答-------------------- 线程中没调用任何控件,就跟上面的代码一样。回调函数也只有一个RETURN 1。 --------------------编程问答-------------------- 在代码中加入这句试试看:Form.CheckForIllegalCrossThreadCalls = false; --------------------编程问答-------------------- Form.CheckForIllegalCrossThreadCalls = false;
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,