2011-06-12 194 views
2

播放視頻WPF的MediaElement我有引用的DLL的WPF控制檯應用程序。我實例化並嘗試在MediaElement上播放視頻,但它並未觸發任何事件。這可能意味着它不播放視頻。以下是我寫的代碼:如何在控制檯應用程序

class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      var element = new MediaElement(); 
      element.BeginInit(); 
      element.Source = new Uri("Wildlife.wmv", UriKind.RelativeOrAbsolute); 
      element.EndInit(); 
      element.LoadedBehavior = element.UnloadedBehavior = MediaState.Manual; 
      element.MediaOpened += new RoutedEventHandler(MediaElement_MediaOpened); 
      element.Play(); 
      Console.ReadLine(); 
     } 

     static void MediaElement_MediaOpened(object sender, RoutedEventArgs e) 
     { 
      Console.WriteLine("Media opened"); 
     } 
    } 

我希望在控制檯上寫入「media opened」。它在WPF應用程序中正常工作。我在這裏做錯了什麼?

我使用WPF 4.0

編輯:請注意,我不感興趣的視頻輸出。我知道我可以實例化一個窗口並加載視頻,但這不是我想要做的。我只是想了解爲什麼這段代碼不工作?

注意:在WPF中,如果我在Window_Load中執行相同的一組行,但不將wpf元素添加到可視化樹;我確實被解僱了。它不是關於元素被插入到可視化樹中。還有一些是我需要的,我不確定那是什麼。

+1

爲什麼你有一個控制檯應用程序,當你想播放視頻? – svick 2011-06-12 14:13:06

+0

它應該在屏幕上播放?它可能需要一個實際的窗口。 – 2011-06-12 14:29:28

+0

@svick和@ agent-j這只是一個測試。我不想看視頻。我期待播放的音頻和事件被提出。 – 2011-06-13 11:11:06

回答

2

The MediaElement control requires a Win32 message loop in order to perform its operations。沒有一個,它根本無法工作。默認情況下,您的控制檯應用程序中不會有一個。

爲什麼它在你的Window.Load事件的原因是因爲運行的WPF應用程序的一部分消息循環。這與「視覺樹的生根」無關。

這也是爲什麼@mzabsky's solution in PowerShell works,因爲Window.ShowDialog方法將確保存在處理Win32消息的消息循環。

+0

你的回答是正確的,它需要Win32消息循環。由Dispatcher.Run()啓動。剛剛添加到最後一行,它開始工作正常。你有這個索賠的任何在線參考? – 2011-06-13 15:08:49

+0

沒有參考,這就是Windows的工作原理。 – user7116 2011-06-13 15:22:06

+0

不,我要求提供消息循環的MediaElement參考。 – 2011-06-13 15:42:13

1

This是如何直接從PowerShell控制檯打開正常的WPF窗口的教程。我認爲使用C#代碼的常規控制檯的行爲幾乎相同。

有趣的部分是這樣的:

$window = New-Object Windows.Window 

$window.Title = $window.Content = 「Hello World. Check out PowerShell and WPF Together.」 

$window.SizeToContent = 「WidthAndHeight」 

$null = $window.ShowDialog() 

你必須打開一個新的窗口,對話框(否則你就必須在不同的線程不知何故運行它,我猜)。

如果你不希望看到一個窗口,您可以嘗試ShowDialog的調用後隱藏它,但我不認爲你可以,反正與控制檯的工作。

+0

問題是爲什麼我需要一個窗口? – 2011-06-13 08:59:49

+0

我認爲這是因爲MediaElement沒有硬件上下文,如果控件沒有植根於可視層次結構。 – 2011-06-13 12:22:22

+0

我告訴你,它在WPF中工作,而不需要根植。 – 2011-06-13 12:30:03

相關問題