Je crée une application sur Rasp Pi 3 où je peux déclencher un bouton sur "Playback Page" pour activer une lecture audio en utilisant MediaPlayer dans une page. Une fois que je passe à une autre page, l'audio reste en arrière-plan mais une fois que je reviens à la "Playback Page", l'audio est toujours en cours de lecture mais j'ai perdu le contrôle du MediaPlayer = new MediaPlayer(); ligne. si c'est en mode répétition je ne peux pas arrêter de jouer & si je déclenche un autre message, les deux nouveaux messages & seront lus simultanément. Comment puis-je m'assurer qu'il n'y a qu'un seul lecteur MediaPlayer à la fois, même lorsque je passe d'une page à l'autre. S'il vous plaît aider. Je vous remercie.Windows IoT Raspberry Pi 3 C# Lecture audio dans différentes pages
Code Modifié:
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;
}
}
ancien code:
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...";
};
}
Merci. Je vais essayer ça. Je suis curieux que l'utilisation de pivot donne presque le même résultat que la déclaration mediaplayer ne coûtera pas de conflit comme mon cas? – mylim
Salut, j'ai couru le code et comme je clique sur le bouton à la page, il a couru dans "exception User-Unhandled" où la valeur de verrouillage (syncobj) ne peut pas être nulle. Je ne comprends pas. – mylim
Salut mylim, syncObj devrait être un nouvel objet. –