我正在使用Vlc.DotNet.Wpf播放视频
`
private void CreateVlcObject1()
{
myControl1 = new VlcControl();
myControl1.MediaPlayer.VlcLibDirectoryNeeded+=MediaPlayer_VlcLibDirectoryNeeded;
myControl1.MediaPlayer.EndReached += MediaPlayer_EndReached1;
myControl1.MediaPlayer.EndInit(); myControl1.MediaPlayer.Play(newUri(@"C:\Users\Public\videos\45.mp4"));
MainGrid.Children.Add(myControl1);
}
`
`
private void DisposeObject1()
{
myControl1.MediaPlayer.VlcLibDirectoryNeeded -= MediaPlayer_VlcLibDirectoryNeeded1;
myControl1.MediaPlayer.EndReached -= MediaPlayer_EndReached1;
if (!myControl1.MediaPlayer.IsDisposed)
{
myControl1.MediaPlayer.Stop();
myControl1.MediaPlayer.Dispose();
}
myControl1 = null;
MainGrid.Children.Remove(myControl1);
}
`
程序在Dispose方法中遇到停止方法但是如果我注释停止方法它将停留在dispose方法。 没有处理这个对象我不能继续进行,因为它在1分钟内吃100 MB。
答案 0 :(得分:1)
我找到了这个链接:
http://geekswithblogs.net/cskardon/archive/2008/06/23/dispose-of-a-wpf-usercontrol-ish.aspx
我认为Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
是正确的方法。
希望这有帮助。
答案 1 :(得分:1)
当使用回调时,Vlc.DotNet目前非常敏感:您需要确保从创建控件的同一线程中调用Dispose()和其他与Vlc相关的方法。
如果您正在使用计时器来处理控件,正如您在问题中所说的那样,可能涉及多个线程。
在Wpf中,我说一个好的选择是使用Dispatcher.InvokeAsync(() => {...});
感谢您使用Vlc.DotNet
答案 2 :(得分:-1)
在处置MediaPlayer之前等待MediaPlayer停止,在这里你可以这样做
> await MediaPlayer.StopAsync(); //Used in .Net4.5 and above
>
> MediaPlayer.Dispose();