在Time事件里 //停止捕获视频
if (capture != null)
{
capture.Stop();
capture.PreviewWindow = null;
capture.Dispose();
}
capture = new Capture(videoDevice, audioDevice);
//视频压缩
LoadVideoCompressors();
//音频压缩
LoadAudioCompressors();
if (!capture.Cued)
{
foreach (UCapacity u in uList)
{
if (u.Capacity > 10)
{
//捕获的视频存储到本地硬盘的路径
capture.Filename = u.U + System.DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".avi";
break;
}
}
}
//预览模式将捕获到的视频显示到界面控件)
if (capture.PreviewWindow == null)
{
capture.PreviewWindow = this.panelShow;
}
//开始捕获
capture.Start();运行几个小时后
capture.Start();
提示尝试读取或写入受保护的内存,这通常指示其他内存已损坏在网上找到如下片段:
“底层的com组件根据你进程调用组件的次数来控制对象的增加和释放(对象释放会延迟,com自身的问题)。一般是调用强制垃圾回收或ao自带的回收对象的方法,效果不明显。
这种对象不释放的情况,通常出现在应用程序反复调用频率极高的情况下,调用间隔的时间小于对象回收的速度,将报这种错误。通常是自己的程序写的机构不合理,才会产生这种情况。 解决方法是自己在程序里强制释放COM资源,调用Marshal.ReleaseComObject()方法将不再使用的对象释放掉。”Marshal.ReleaseComObject()需要指定com对象显示释放,那我应该怎么释放呢?
if (capture != null)
{
capture.Stop();
capture.PreviewWindow = null;
capture.Dispose();
}
capture = new Capture(videoDevice, audioDevice);
//视频压缩
LoadVideoCompressors();
//音频压缩
LoadAudioCompressors();
if (!capture.Cued)
{
foreach (UCapacity u in uList)
{
if (u.Capacity > 10)
{
//捕获的视频存储到本地硬盘的路径
capture.Filename = u.U + System.DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".avi";
break;
}
}
}
//预览模式将捕获到的视频显示到界面控件)
if (capture.PreviewWindow == null)
{
capture.PreviewWindow = this.panelShow;
}
//开始捕获
capture.Start();运行几个小时后
capture.Start();
提示尝试读取或写入受保护的内存,这通常指示其他内存已损坏在网上找到如下片段:
“底层的com组件根据你进程调用组件的次数来控制对象的增加和释放(对象释放会延迟,com自身的问题)。一般是调用强制垃圾回收或ao自带的回收对象的方法,效果不明显。
这种对象不释放的情况,通常出现在应用程序反复调用频率极高的情况下,调用间隔的时间小于对象回收的速度,将报这种错误。通常是自己的程序写的机构不合理,才会产生这种情况。 解决方法是自己在程序里强制释放COM资源,调用Marshal.ReleaseComObject()方法将不再使用的对象释放掉。”Marshal.ReleaseComObject()需要指定com对象显示释放,那我应该怎么释放呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货