检测到 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 = "视频正在播放!";
请帮看看怎么解决,谢谢
3 个解决方案
#1
有谁开发过 海康威视啊 交流下好么
#2
急死了
#3
将委托声明为成员变量就好了,这个因为声明的委托时临时变量,被。net垃圾回收引起的。
#1
有谁开发过 海康威视啊 交流下好么
#2
急死了
#3
将委托声明为成员变量就好了,这个因为声明的委托时临时变量,被。net垃圾回收引起的。