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

UWP MediaPlayer重定向应用实例后旧音频仍播放问题求助

解决思路
  • 让已存在的实例响应新激活请求
    目前的重定向只是把激活请求转给了旧实例,但旧实例没有处理这个新请求来停止播放。需要在App类中重写OnActivated方法,当收到新的文件激活事件时,先终止当前MediaPlayer的播放,再加载新文件。

  • 全局持有MediaPlayer实例
    将MediaPlayer实例放在App类或者全局可访问的位置,这样在处理新激活时,能直接调用它的Pause()方法,或者设置Source = null来彻底终止音频输出。

  • 修改App类的激活处理逻辑
    示例代码参考:

    protected override void OnActivated(IActivatedEventArgs args)
    {
        base.OnActivated(args);
        
        if (args is FileActivatedEventArgs fileArgs)
        {
            // 获取页面中的MediaPlayer实例(假设MainPage里有公开的MediaPlayer属性)
            var mainPage = Window.Current.Content as MainPage;
            if (mainPage?.MediaPlayer != null)
            {
                if (mainPage.MediaPlayer.PlaybackSession.PlaybackState == MediaPlaybackState.Playing)
                {
                    mainPage.MediaPlayer.Pause();
                    // 也可以直接清空播放源:mainPage.MediaPlayer.Source = null;
                }
            }
            
            // 处理新文件的加载逻辑,比如导航到页面并传递文件
            var rootFrame = Window.Current.Content as Frame;
            if (rootFrame == null)
            {
                rootFrame = new Frame();
                Window.Current.Content = rootFrame;
            }
            rootFrame.Navigate(typeof(MainPage), fileArgs.Files.FirstOrDefault());
            Window.Current.Activate();
        }
    }
    
  • 确认实例注册逻辑的一致性
    你当前代码里给媒体文件统一用playbackMedia作为实例键是正确的,确保所有媒体文件都会重定向到同一个实例。关键是要让这个旧实例在收到新激活请求时,执行停止旧播放、加载新内容的操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:37:45