C#开发过海康威视的进 急急急
调用海康的SDK播放视频时,有时会出现如下异常检测到 CallbackOnCollectedDelegate
Message: 对“RealDataCallBack::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
程序代码如下
委托定义:
public delegate void RealDataCallBack(int lRealHandle, uint dwDataType, [MarshalAs(UnmanagedType.LPArray, SizeConst = 11520)] byte[] pBuffer, uint dwBufSize, uint dwUser);
回调定义:
private static void SMyRealDataCallBack(int lRealHandle, uint dwDataType, [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, uint dwBufSize, uint dwUser)
{
}
登陆成功后播放前调用:
播放按钮调用代码如下:
Hik_HCNetSDK.NET_DVR_Init
NET_DVR_DEVICEINFO dev = new RoomWatchClient.NET_DVR_DEVICEINFO();
handle = Hik_HCNetSDK.NET_DVR_Login(ServIP, ushort.Parse(Port), UserName, PassWord, ref dev);
NET_DVR_CLIENTINFO cli = new NET_DVR_CLIENTINFO();
cli.hPlayWnd = pnlVideo.Handle;//句柄
cli.lChannel = int.Parse(Channel);
cli.lLinkMode = 0;
RealDataCallBack rdc = new RealDataCallBack(SMyRealDataCallBack);
gc2 = GCHandle.Alloc(rdc);
chnRet = Hik_HCNetSDK.NET_DVR_RealPlay(handle, ref cli);
if (chnRet == -1)
{
MessageBox.Show("网络连接失败!");
return;
}
Hik_HCNetSDK.NET_DVR_SetRealDataCallBack(chnRet, rdc, (uint)handle);
lbPrompt.Text = "视频正在播放!";
请帮看看怎么解决,谢谢 --------------------编程问答-------------------- 有谁开发过 海康威视啊 交流下好么 --------------------编程问答-------------------- 急死了 --------------------编程问答-------------------- 将委托声明为成员变量就好了,这个因为声明的委托时临时变量,被。net垃圾回收引起的。
补充:.NET技术 , C#