如何为wpf配置VlcControl

时间:2017-03-09 05:25:25

标签: c# wpf vlc

我正在使用Vlc.DotNet.Wpf播放视频

  1. 创建VlcControl对象
  2. `

    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);
    }
    

    `

    1. 处理VlcControl对象的方法
    2. `

        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。

      当我打破它时,显示如下: Break All 我的问题是如何处置此VlcControl对象 的被修改 我每15秒处理一次vlc对象

3 个答案:

答案 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();