C# SystemMediaControls.ButtonPressed事件激发两次

C# SystemMediaControls.ButtonPressed事件激发两次,c#,uwp,C#,Uwp,我想向SystemMediaControls添加媒体播放器控件。但是,我有个问题。当您按下它时,它会出现两次。请参阅下面的代码: using Windows.Media; using . . . public class Main{ public static SystemMediaTransportControls systemMediaControls; public Main(){ this.InitializeComponent(); s

我想向SystemMediaControls添加媒体播放器控件。但是,我有个问题。当您按下它时,它会出现两次。请参阅下面的代码:

using Windows.Media;
using . . .

public class Main{
    public static SystemMediaTransportControls systemMediaControls;
    public Main(){
        this.InitializeComponent();
        systemMediaControls = SystemMediaTransportControls.GetForCurrentView();
        int num = 0;
        systemMediaControls.ButtonPressed += async (SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs e) =>
        {
            num++;
            Debug.WriteLine($"Event number: {num}");
        };
   }
}
我用调试日志证明了这一点,调试日志如下:

活动编号:1
活动编号:1
活动编号:2
活动编号:2
活动编号:3
活动编号:3

我不知道问题出在哪里

SystemMediaControls.ButtonPressed事件激发两次

我已经用官方代码样本进行了测试。不幸的是,我们无法重现这个问题,根据官方教程,如果您想自定义
SystemMediaTransportControls
,我们首先需要将播放状态同步到
MediaPlayerState
。并在按钮按下事件中控制媒体播放器

switch (mediaPlayer.PlaybackSession.PlaybackState)
            {
                case MediaPlaybackState.None:
                    systemMediaControls.PlaybackStatus = MediaPlaybackStatus.Closed;
                    break;

                case MediaPlaybackState.Opening:
                    // This state is when new media is being loaded to the MediaPlayer [ie.
                    // Source].  For this sample the design is to maintain the previous playing/pause 
                    // state before the new media is being loaded.  So we'll leave the PlaybackStatus alone
                    // during loading.  This keeps the system UI from flickering between displaying a "Play" 
                    // vs "Pause" software button during the transition to a new media item.
                    break;

                case MediaPlaybackState.Buffering:
                    // No updates in MediaPlaybackStatus necessary--buffering is just
                    // a transitional state where the system is still working to get
                    // media to start or to continue playing.
                    break;

                case MediaPlaybackState.Paused:
                    if (mediaPlayer.PlaybackSession.Position == TimeSpan.Zero)
                        systemMediaControls.PlaybackStatus = MediaPlaybackStatus.Stopped;
                    else
                        systemMediaControls.PlaybackStatus = MediaPlaybackStatus.Paused;
                    break;

                case MediaPlaybackState.Playing:
                    systemMediaControls.PlaybackStatus = MediaPlaybackStatus.Playing;
                    break;

            }

有关详细信息,请参阅这是我的错。我把事件放在主页主功能上。错误是,我在App.cs中多次调用主页。例如:

void LaunchApp() {
    new MainPage();
     ...
    rootFrame.Navigate(typeof(MainPage));
}
所以它初始化了两次。这就是为什么该事件也会发生两次。我已经解决了我的问题