2011-06-12 199 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

相关问题