如何解决如何在控制台应用程序中的WPF MediaElement上播放视频
| 我有一个引用WPF dll的控制台应用程序。我实例化并尝试在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\");
}
}
我希望“媒体已打开”会写在控制台上。在WPF应用中可以正常工作。我在这里做错了什么?
我正在使用WPF 4.0
编辑:请注意,我对视频输出不感兴趣。我知道我可以实例化一个窗口并在其中加载视频,但这不是我想要的。我只想了解为什么这段代码不起作用?
注意:在WPF中,如果我在Window_Load中执行相同的行集而不将wpf元素添加到可视树中;我确实触发了该事件。它与插入可视树无关。还有其他要求,我不确定这是什么。
解决方法
“ 1”控件需要Win32消息循环才能执行其操作。没有一个,它将根本无法工作。默认情况下,您的控制台应用程序中将没有一个。
它在您的“ 2”事件中起作用的原因是因为有消息循环作为WPF应用程序的一部分运行。这与“在视觉树中扎根”无关。
这也是在PowerShell中@mzabsky解决方案起作用的原因,因为
Window.ShowDialog
方法将确保存在消息循环来处理Win32消息。
, 这是有关如何直接从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调用后将其隐藏,但是我认为您仍然无法使用该控制台。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。