c# – 如果移动到其他屏幕,WPF MediaElement将停止播放

前端之家收集整理的这篇文章主要介绍了c# – 如果移动到其他屏幕,WPF MediaElement将停止播放前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到一个非常奇怪的问题,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>

有谁经历过(并最终解决了)任何类似的问题?

解决方法

我找到了一个解决方法,在窗口渲染中禁用硬件加速似乎解决了这个问题:
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);
    }

我无法察觉到任何性能差异,并且问题不会出现在任何测试中…

猜你在找的C#相关文章