关于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#