[英]Windows IoT Raspberry Pi 3 c# Audio Playback in Different Pages
我正在Rasp Pi 3上制作一個應用程序,我可以在該頁面上觸發一個“播放頁面”上的按鈕以使用MediaPlayer激活音頻播放。 一旦切換到另一個頁面,音頻將繼續在后台播放,但是一旦導航回到“播放頁面”,音頻仍在播放,但是由於我的mediaPlayer = new MediaPlayer(),我失去了對MediaPlayer的控制。 線。 如果處於重復模式,我將無法停止播放;如果觸發另一則消息,則新消息和現有消息都將同時播放。
即使在頁面之間切換,如何確保一次只播放一個MediaPlayer。 請幫忙。 謝謝。
編輯代碼:
public sealed partial class MessagePage : Page
{
private object syncObj = new object();
public MessagePage()
{
this.InitializeComponent();
startclock();
this.Home.Click += Home_Click;
this.Message.Click += Message_Click;
//mediaPlayer = new MediaPlayer();
mediaPlayer = this.GetInstance();
//mediaPlayer.MediaEnded += MediaPlayer_MediaEnded;
//mediaPlayer.MediaOpened += MediaPlayer_MediaOpened;
}
public MediaPlayer GetInstance()
{
lock (syncObj)
{
if (mediaPlayer == null)
{
mediaPlayer = new MediaPlayer();
mediaPlayer.MediaEnded += MediaPlayer_MediaEnded;
mediaPlayer.MediaOpened += MediaPlayer_MediaOpened;
}
}
return mediaPlayer;
}
}
舊代碼:
public MessagePage()
{
this.InitializeComponent();
startclock();
this.Home.Click += Home_Click;
this.Message.Click += Message_Click;
mediaPlayer = new MediaPlayer();
mediaPlayer.MediaEnded += MediaPlayer_MediaEnded;
}
private async void Btn_Click(object sender, RoutedEventArgs e)
{
StorageFolder externalDevices = KnownFolders.RemovableDevices;
IReadOnlyList<StorageFolder> externalDrives = await externalDevices.GetFoldersAsync();
StorageFolder usbStorage = externalDrives[0];
if (usbStorage != null)
{
StorageFolder storageFolder = KnownFolders.RemovableDevices;
StorageFile audioFile = await usbStorage.GetFileAsync("message1.mp3");
mediaPlayer.Source = Windows.Media.Core.MediaSource.CreateFromStorageFile(audioFile);
mediaPlayer.Play();
TextBlock.Text = "Playing Message 1...";
}
else
{
TextBlock.Text = "No USB Storage Detected...";
};
}
您需要在此處使用單例模式 。單例模式是一種軟件設計模式,用於將類的實例化限制為一個對象。 當僅需要一個對象來協調整個系統中的動作時,這將很有用。
private static readonly object syncObj = new object();
public MediaPlayer GetInstance()
{
lock (syncObj)
{
if (mediaPlayer == null)
{
mediaPlayer = new MediaPlayer();
mediaPlayer.MediaEnded += MediaPlayer_MediaEnded;
}
}
return mediaPlayer;
}
public MessagePage() { this.InitializeComponent(); startclock(); this.Home.Click += Home_Click; this.Message.Click += Message_Click; //mediaPlayer = new MediaPlayer(); mediaPlayer = this.GetInstance(); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.