Sorry for my bal english !
On Microsoft store i have an app Horloge parlante, it is an UWP app works only if langage French is installed on Windows 10 / 11
I try to build a new one with Winui Desktop Micorosft.WindowsAppsSDK
the problem is mediaPlayer PalyToEnd().
On the UWP I have this to do the job : mediaplayer wait until play sound ends.
<
for (int i = 0; i < x; i++)
{
await son.PlayToEndAsync(uri);
}
public static class MediaElementExtensions
{
public static async Task<MediaElement> PlayToEndAsync(this MediaElement mediaElement, Uri source)
{
mediaElement.Source = source;
return await mediaElement.WaitToCompleteAsync();
}
/*********************************************************************/
public static async Task<MediaElement> WaitToCompleteAsync(this MediaElement mediaElement)
{
var tcs = new TaskCompletionSource<MediaElement>();
RoutedEventHandler reh = null;
reh = (s, e) =>
{
if (mediaElement.CurrentState == MediaElementState.Buffering ||
mediaElement.CurrentState == MediaElementState.Opening ||
mediaElement.CurrentState == MediaElementState.Playing)
{
return;
}
mediaElement.CurrentStateChanged -= reh;
tcs.SetResult((MediaElement)s);
};
mediaElement.CurrentStateChanged += reh;
return await tcs.Task;
}
Wniui ha no MediaElement but a MediaPLayerElement I ty to modify the class for Winui like this :
<
public static class MediaElementExtensions
{
public static async Task<MediaPlayerElement> PlayToEndAsync(this MediaPlayerElement mediaElement, Uri source)
{
mediaElement.Source = Windows.Media.Core.MediaSource.CreateFromUri(source);
mediaElement.MediaPlayer.Play();
return await mediaElement.WaitToCompleteAsync();
}
/*********************************************************************/
public static async Task<MediaPlayerElement> WaitToCompleteAsync(this MediaPlayerElement mediaElement)
{
var tcs = new TaskCompletionSource<MediaPlayerElement>();
RoutedEventHandler reh = null;
reh = (s, e) =>
{
if (mediaElement.MediaPlayer.CurrentState == Windows.Media.Playback.MediaPlayerState.Buffering ||
mediaElement.MediaPlayer.CurrentState == Windows.Media.Playback.MediaPlayerState.Opening ||
mediaElement.MediaPlayer.CurrentState == Windows.Media.Playback.MediaPlayerState.Playing)
{
return;
}
mediaElement.MediaPlayer.CurrentStateChanged -= reh;
tcs.SetResult((MediaPlayerElement)s);
};
mediaElement.MediaPlayer.CurrentStateChanged += reh;
return await tcs.Task;
}
>
This won't compile i get :
Error CS0029 Cannot implicitly convert type 'Microsoft.UI.Xaml.RoutedEventHandler' to 'Windows.Foundation.TypedEventHandler<Windows.Media.Playback.MediaPlayer, object>' Horloge parlante D:\Mes SDK\Horloge parlante\Horloge parlante\Horloge\HorlogeMain.xaml.cs
Any idee to modifiy this in WinUI ?