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);
    }

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

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...