链接到完整的示例应用程序libvlcsharp运行时版本v4.0.30319版本3.4.4.0
我构建了一个更简单的应用程序,它与当前部署的应用程序存在相同的问题。
这里的代码让播放器开始:
videoView1.MediaPlayer.Play(new Media(_libVLC, URI,FromType.FromLocation));
下面是清理代码片段:
videoView1.MediaPlayer.Stop();
videoView1.MediaPlayer.Dispose();
videoView1.Dispose();
//dispose glibvlc at higher level
MediaPlayer处理工作正常,没有错误。但是,videoview dispose会导致内存访问冲突。我知道这是不正常的,因为我构建了一个简单的c#应用程序,没有使用任务来处理和清理对象,并且工作得很好。
然而,我试图调试的应用程序每个流显示一个线程,以管理设置和关闭每个连接。
如果代码只是在mediaplayer上调用dispose而不释放videoview对象,那么包含libvlcsharp对象的对象在被释放时会导致内存访问冲突。
如果我不处置MediaPlayer对象任何后续对象处置调用工作OK。我已经验证了这是内存泄漏。
In UI class
设置所有表单变量
实例化LibVLC
StartVideo ();以Play方法
结束Task.Run(() =比;问());这模拟了可能发生在实际应用
Ask函数询问用户是否想退出程序或杀死当前玩家并重新构建并开始。
- 如果用户取消,它将通过On Application Exit处理程序退出does执行上面显示的Dispose序列。
- 如果用户杀死并重启,那么它在videoView1 dispose as上失败上面描述的。
这是c#的示例ask函数。
public void Ask()
{
while (true)
{
DialogResult r = MessageBox.Show("Dispose and Start Again?", "Memory Access Violation Test", MessageBoxButtons.OKCancel);
if (r == DialogResult.OK)
{
videoView1.MediaPlayer.Stop();
videoView1.MediaPlayer.Dispose();
videoView1.Dispose();
StartVideo();
}
else
{
Invoke(new Action(() => this.Close()));
}
}
}
修复libvlcsharp和libvlcwinforms.winforms的3.6.1.0版本问题