2017-03-09 53 views
1

我使用Vlc.DotNet.Wpf播放視頻如何處置VlcControl爲WPF

  1. 創建VlcControl對象

`

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

`

  • VlcControl對象的配置方法
  • `

    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秒

    回答

    1

    VLC對象,我發現這個鏈接:

    http://geekswithblogs.net/cskardon/archive/2008/06/23/dispose-of-a-wpf-usercontrol-ish.aspx

    我認爲Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;是正確的方法。

    希望這會有所幫助。

    +0

    @WolfgangThanks我不想關閉應用程序,所以我覺得shutdownStarted事件是沒有用的我。 – tabby

    +0

    我在Github論壇上發現,你應該做一個Application.DoEvents(); befor stop: this.vlcControl.Stop(); –

    +0

    https://github.com/ZeBobo5/Vlc.DotNet/issues/115 –

    0

    處置之前等待的MediaPlayer爲MediaPlayer的停下來,在這裏你可以做這樣的

    > await MediaPlayer.StopAsync(); //Used in .Net4.5 and above 
    > 
    > MediaPlayer.Dispose(); 
    
    +0

    沒有StopASync()方法。 – tabby

    +1

    查看這個鏈接可能對您有所幫助http://vlcdotnet.codeplex.com/workitem/6496 https://www.codeproject.com/Articles/109639/nVLC?msg=3971279#xx3971279xx –

    0

    Vlc.DotNet使用回調時是目前非常敏感:你需要確保你調用Dispose()和來自創建控件的相同線程中的其他Vlc相關方法。

    如果您使用定時器來處理控件,就像您在問題中所說的那樣,有可能涉及多個線程。

    在WPF中,我會說一個很好的選擇是使用Dispatcher.InvokeAsync(() => {...});

    感謝您使用Vlc.DotNet您的回覆