WPF MediaElement在移动到其他屏幕时停止播放

10

我使用MediaElement遇到了一个非常奇怪的问题,似乎与多屏幕环境有关:偶尔(我无法每次复制该问题)当我将包含MediaElement的窗口从一个屏幕拖动到另一个屏幕时,它停止播放。

这种奇怪的行为也会在非常基本的代码中出现,例如:

public MainWindow()
{
    InitializeComponent();
}

protected override void OnSourceInitialized(EventArgs e)
{
    media.Play();
    base.OnSourceInitialized(e);
}

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <MediaElement LoadedBehavior="Manual" 
                      Name="media" 
                      Source="C:\Users\Maurizio\Desktop\Pulp Fiction.avi"/>
    </Grid>
</Window>

有人遇到过类似的问题吗?如果有,你们是如何解决的?

1个回答

11

我发现了一个解决方法,禁用窗口渲染中的硬件加速似乎可以解决这个问题:

using System.Windows.Interop;
...

    protected override void OnSourceInitialized(EventArgs e)
    {
        HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
        HwndTarget hwndTarget = hwndSource.CompositionTarget;
        hwndTarget.RenderMode = RenderMode.SoftwareOnly;
        media.Play();
        base.OnSourceInitialized(e);
    }

我感觉性能没有任何差别,而且问题在任何测试中都没有出现...


我知道这已经过时了,但是我想提一下,如果您将视频定位在不同的监视器上,视频只会在一个屏幕上播放。虽然这是一个相对较小的问题。 - Nathan Phetteplace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接