内存访问冲突从任务中处理libvlcsharp对象



链接到完整的示例应用程序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版本问题

相关内容

  • 没有找到相关文章

最新更新