Windows 物联网 Raspberry Pi 3 c# MediaPlayer.mediaEnded
Windows IoT Raspberry Pi 3 c# MediaPlayer.mediaEnded
我是新手。
我正在尝试使用 Win IoT 核心在 Rasp Pi 3 上做一个音频消息播放器。
我设法从我的 USB 拇指驱动器播放音频文件,但我需要知道音频文件何时完成播放。
mediaPlayer = new MediaPlayer();
mediaPlayer.MediaEnded += MediaPlayer_MediaEnded;
private void MediaPlayer_MediaEnded(MediaPlayer sender, object args)
{
GeneralMessage.Text = "Message Complete!";
}
我收到一条包含上述代码的错误消息。
System.Exception occurred
HResult=0x8001010E
Message=The application called an interface that was marshalled for a
different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
请帮忙。
您的问题的原因是,UI 更改必须在 UI 线程上进行,但 MediaEnded 事件是在另一个线程上引发的。
在 windows IoT Core 中,当您从另一个线程更新 UI 中的元素时,请使用 Dispatcher.RunAsync 方法。
Task.Run(async () =>
{
//this part is run on a background thread...
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
()=>
{
//this part is being executed back on the UI thread...
GeneralMessage.Text = "Message Complete!";
});
});
请参考此处 Media items, playlists, and tracks。本文展示了如何使用 MediaSource ,并包括在 CoreDispatcher.RunAsync 调用中执行的操作。
我设法解决了调用问题..代码如下
private async void MediaPlayer_MediaEnded(MediaPlayer sender, object args)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
GeneralMessage.Text = "Done playing.";
});
我是新手。 我正在尝试使用 Win IoT 核心在 Rasp Pi 3 上做一个音频消息播放器。 我设法从我的 USB 拇指驱动器播放音频文件,但我需要知道音频文件何时完成播放。
mediaPlayer = new MediaPlayer();
mediaPlayer.MediaEnded += MediaPlayer_MediaEnded;
private void MediaPlayer_MediaEnded(MediaPlayer sender, object args)
{
GeneralMessage.Text = "Message Complete!";
}
我收到一条包含上述代码的错误消息。
System.Exception occurred
HResult=0x8001010E
Message=The application called an interface that was marshalled for a
different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
请帮忙。
您的问题的原因是,UI 更改必须在 UI 线程上进行,但 MediaEnded 事件是在另一个线程上引发的。
在 windows IoT Core 中,当您从另一个线程更新 UI 中的元素时,请使用 Dispatcher.RunAsync 方法。
Task.Run(async () =>
{
//this part is run on a background thread...
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
()=>
{
//this part is being executed back on the UI thread...
GeneralMessage.Text = "Message Complete!";
});
});
请参考此处 Media items, playlists, and tracks。本文展示了如何使用 MediaSource ,并包括在 CoreDispatcher.RunAsync 调用中执行的操作。
我设法解决了调用问题..代码如下
private async void MediaPlayer_MediaEnded(MediaPlayer sender, object args)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
GeneralMessage.Text = "Done playing.";
});