我有一个正在开发的程序,我们很久以前就发现了内存泄漏,并且已经设法解决了最初的问题,但是现在我们发现我们的 AForge.net 视频播放器正在泄漏句柄,我们正在处理控件但是由于某种原因,手柄永远不会被释放。
使用 AForge.Net 视频控件的窗口是一个弹出的气泡,告诉用户一些信息,如果视频源可用,则显示,我们发现如果我们不提供视频源,则释放句柄正确,但是每当我们显示视频流时,句柄都不会释放,最终我们达到 15,000 个句柄并且应用程序崩溃,告诉我们 AForge.NET 是错误模块。
处置代码如下。
if (videoSourcePlayer != null)
{
if (videoSourcePlayer.VideoSource != null)
{
// clearing the event subscription
videoSourcePlayer.VideoSource.PlayingFinished -= VideoSource_PlayingFinished;
// remove refernce to video source
videoSourcePlayer.VideoSource = null;
}
if (videoSourcePlayer.IsRunning && _openVideoAlarmsCount < 1)
{
videoSourcePlayer.Stop();
}
if (videoSourcePlayer.IsRunning)
{
videoSourcePlayer.VideoSource.Stop();
}
videoSourcePlayer.Click -= videoSourcePlayer_Click;
// dispose video player
videoSourcePlayer.Dispose();
videoSourcePlayer = null;
}
videoSourcePlayer 是 WinForm 上控件的名称,我相信它被正确处理,但无论我尝试什么,我都无法让它正确释放句柄,我无法共享大部分代码,但我可以尝试回答任何问题任何人都有可能有助于纠正问题或至少识别错误的问题。
注意:我们使用的是 Winforms + .NET 3.5 SP1 和来自http://www.aforgenet.com/news/2012.02.23.releasing_framework_2.2.4.html的最新 AForge.net
预先感谢您的帮助!