You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win10 IoT下WPF MediaElement运行一周后无法显示的问题求助

Win10 IoT 1906上WPF MediaElement运行一周后无画面(重启应用无效,仅系统重启恢复)

问题描述

基于C# .NET 6 WPF开发的自助服务终端软件,部署在Win10 1906 IoT设备(开发环境VS2022)。主界面通过MediaElement动态加载本地.mp4文件,初期运行正常,但一周后MediaElement突然停止显示画面,无任何异常抛出,应用其余代码仍正常执行。重启应用无法恢复,仅重启Windows可临时解决,但问题会在一周后复现。应用内存始终稳定在500MB左右,推测为系统层面问题,但无从入手。

相关代码片段:

媒体加载代码

case 3:
    myImagePoettinger.Source = new Uri(@"Graphics\door_open.mp4", UriKind.Relative);
    repeatVideo = false;
    break;
case 4:
    myImagePoettinger.Source = new Uri(@"Graphics\insertion.mp4", UriKind.Relative);
    repeatVideo = false;
    break;
case 5:
    myImagePoettinger.Source = new Uri(@"Graphics\Start_2.mp4", UriKind.Relative);
    repeatVideo = false;
    break;
case 6:
    myImagePoettinger.Source = new Uri(@"Graphics\door_close.mp4", UriKind.Relative);
    repeatVideo = false;
    break;
case 7:
    myImagePoettinger.Source = new Uri(@"Graphics\hydraulic.mp4", UriKind.Relative);
    repeatVideo = true;
    break;
case 8:

MediaEnded重播代码

void Media_Ended(object sender, EventArgs e)
{
    if (repeatVideo)
    {
        myImagePoettinger.Position = TimeSpan.FromMilliseconds(1);
    }
}

XAML中的MediaElement定义

<MediaElement x:Name="myImagePoettinger" Width="900" Height="600" Visibility="Visible"></MediaElement>

排查与解决方向

1. 系统媒体组件资源泄漏

Win10 IoT的媒体播放组件(如Windows Media Player相关服务)可能存在长期运行后的资源泄漏,重启应用无法释放系统级资源。

  • 切换视频时显式清理旧资源:
    // 切换前先释放当前资源
    myImagePoettinger.Source = null;
    myImagePoettinger.Close();
    // 再加载新视频
    myImagePoettinger.Source = new Uri(@"Graphics\XXX.mp4", UriKind.Relative);
    
  • 定期重启媒体相关服务(需管理员权限):
    Process.Start(new ProcessStartInfo
    {
        FileName = "net",
        Arguments = "stop WMPNetworkSvc && net start WMPNetworkSvc",
        UseShellExecute = true,
        Verb = "runas"
    });
    

2. 循环播放的状态异常积累

当前仅通过设置Position实现循环,可能导致媒体引擎内部状态异常堆积。

  • 改为重新加载Source实现循环:
    void Media_Ended(object sender, EventArgs e)
    {
        if (repeatVideo)
        {
            var currentSource = myImagePoettinger.Source;
            myImagePoettinger.Source = null;
            myImagePoettinger.Source = currentSource;
        }
    }
    

3. Win10 IoT 1906的已知媒体bug

Win10 1906属于较旧的IoT版本,可能存在媒体组件长期运行的bug:

  • 尝试升级到Win10 IoT较新版本(如21H2及以上),修复已知系统级资源泄漏问题;
  • 若无法升级,禁用硬件加速:
    RenderOptions.SetProcessRenderMode(myImagePoettinger, RenderMode.SoftwareOnly);
    
    或在XAML中添加属性:
    <MediaElement x:Name="myImagePoettinger" Width="900" Height="600" Visibility="Visible"
                  RenderOptions.ProcessRenderMode="SoftwareOnly"></MediaElement>
    

4. 系统资源监控与日志采集

  • 新增日志跟踪wmplayer.exe或MediaFoundation相关进程的内存、句柄数变化,确认是否存在资源持续增长;
  • 用Windows事件查看器筛选“Windows Media Foundation”相关错误日志,排查隐藏的系统级异常。

内容的提问来源于stack exchange,提问作者Stiegl22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:43:10