求指教“System.StackOverflowException类型的未经处理的异常”

q4690q 2017-10-27 01:27:40

知道程序可能出现了无限循环或递归,但找不到
这个程序是调用dll播放实时视频,半小时左右在回调函数这出现这个异常,求大神指教
...全文
1342 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
q4690q 2017-11-02
  • 打赏
  • 举报
回复
这个代理的修饰注销掉就行:// [UnmanagedFunctionPointer(CallingConvention.Cdecl)],应该是导致回调函数不能被释放吧 private delegate void DataCallBack(int hSessionID, uint nUsrData, int iDataType, IntPtr pAVData, uint nAVDataLen);
q4690q 2017-10-27
  • 打赏
  • 举报
回复
出现这个异常,不能容错,直接软件崩溃
q4690q 2017-10-27
  • 打赏
  • 举报
回复
没有循环,就是回调函数 [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void DataCallBack(int hSessionID, uint nUsrData, int iDataType, IntPtr pAVData, uint nAVDataLen); private DataCallBack dataCallback = null; dataCallback = new DataCallBack(pfnRSMdataCallback); m_lPlayHandle = _4GBusSDK.PlayRSMAVStreamByTCP(device.rsmIp, (uint)device.rsmPort, null, ref stDeviceRSMrequestInfo, dataCallback, 0); private void pfnRSMdataCallback(int hSessionID, uint nUsrData, int iDataType, IntPtr pAVData, uint nAVDataLen) { try { switch (iDataType) { case 1: //视频头 if(nAVDataLen > 0) { PlayCtrl.PlayM4_SetStreamOpenMode(m_lPort, 0); if (!PlayCtrl.PlayM4_OpenStream(m_lPort, pAVData, nAVDataLen, 1024 * 1024 * 5)) { break; } PlayCtrl.PlayM4_SetDisplayBuf(m_lPort, 15); PlayCtrl.PlayM4_SetOverlayMode(m_lPort, 0, 0); if (!PlayCtrl.PlayM4_Play(m_lPort, m_lPlayWnd)) { break; } } break; case 0: //The data of stream if (nAVDataLen > 0 && m_lPort != -1) { PlayCtrl.PlayM4_InputData(m_lPort, pAVData, nAVDataLen); } break; default: if (nAVDataLen > 0 && m_lPort != -1) { PlayCtrl.PlayM4_InputData(m_lPort, pAVData, nAVDataLen); } break; } } catch (Exception ex) { Utils.SaveExceptionLog(ex, "pfnRSMdataCallback"); } }
xdashewan 2017-10-27
  • 打赏
  • 举报
回复
那你发你整个循环,不然很难看出问题
q4690q 2017-10-27
  • 打赏
  • 举报
回复
引用 8 楼 hanjun0612 的回复:
看一下,什么资源没释放,比如List,不断增加等等的问题,或者说读取视频
查看任务管理器及360资源转盘,内存、线程、用户对象、句柄等好像也没有增加好厉害,只是会偶尔有波动而已
正怒月神 2017-10-27
  • 打赏
  • 举报
回复
看一下,什么资源没释放,比如List,不断增加等等的问题,或者说读取视频
  • 打赏
  • 举报
回复
引用 4 楼 q4690q 的回复:
[quote=引用 3 楼 duanzi_peng 的回复:] 能出现StackOverflow 说明可能某些对象一直在使用,从未被释放。 像什么openStream这类的方法,检查代码逻辑吧。
出现这个异常以后就一直在检查代码、甚至更新dll,但还是出现了,有没有什么方法能追踪某些对象是否释放掉吗?[/quote] 这个追踪不到吧。
q4690q 2017-10-27
  • 打赏
  • 举报
回复
也不是一开始就出现,4屏播放半个小时候才出现
q4690q 2017-10-27
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
能出现StackOverflow 说明可能某些对象一直在使用,从未被释放。 像什么openStream这类的方法,检查代码逻辑吧。
主要是这个回调函数的代码也很简单,好像没循环或者递归在里面,所以找不出为什么出现
q4690q 2017-10-27
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
能出现StackOverflow 说明可能某些对象一直在使用,从未被释放。 像什么openStream这类的方法,检查代码逻辑吧。
出现这个异常以后就一直在检查代码、甚至更新dll,但还是出现了,有没有什么方法能追踪某些对象是否释放掉吗?
  • 打赏
  • 举报
回复
能出现StackOverflow 说明可能某些对象一直在使用,从未被释放。 像什么openStream这类的方法,检查代码逻辑吧。
q4690q 2017-10-27
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
也可能是dll里出错
调用的是海康的视频取流解码的dll,应该不存在dll出错吧,毕竟播放其他视频不会出现
xdashewan 2017-10-27
  • 打赏
  • 举报
回复
也可能是dll里出错

111,086

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧