C# SystemMediaControls.ButtonPressed事件激发两次
我想向SystemMediaControls添加媒体播放器控件。但是,我有个问题。当您按下它时,它会出现两次。请参阅下面的代码:C# SystemMediaControls.ButtonPressed事件激发两次,c#,uwp,C#,Uwp,我想向SystemMediaControls添加媒体播放器控件。但是,我有个问题。当您按下它时,它会出现两次。请参阅下面的代码: using Windows.Media; using . . . public class Main{ public static SystemMediaTransportControls systemMediaControls; public Main(){ this.InitializeComponent(); s
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));
}
所以它初始化了两次。这就是为什么该事件也会发生两次。我已经解决了我的问题