1
私は、BackgroundAudioTaskを使用してUWPアプリケーションを作成しています。私のアプリはとてもうまくいっています。今度は、再生されたオーディオの現在の位置をTextBlockに追加します。BackgroundPoolTimerをバックグラウンドオーディオで使用するUWP
私は、オーディオタスクを実装する前に、このメソッドをしていた。
private TimeSpan TotalTime;
private DispatcherTimer timerRadioTime;
private void radioPlayer_MediaOpened(object sender, RoutedEventArgs e)
{
TotalTime = radioPlayer.NaturalDuration.TimeSpan;
// Create a timer that will update the counters and the time slider
timerRadioTime = new DispatcherTimer();
timerRadioTime.Interval = TimeSpan.FromSeconds(1);
timerRadioTime.Tick += TimerRadioTime_Tick;
timerRadioTime.Start();
}
private void TimerRadioTime_Tick(object sender, object e)
{
//Check if the audio finished calculate it's total time
if (radioPlayer.NaturalDuration.TimeSpan.TotalSeconds > 0)
{
if (TotalTime.TotalSeconds > 0)
{
// Updating timer
TimeSpan currentPos = radioPlayer.Position;
var currentTime = string.Format("{0:00}:{1:00}", (currentPos.Hours * 60) + currentPos.Minutes, currentPos.Seconds);
radioTimerBlock.Text = currentTime;
}
}
}
私はそれは私に例外を与えたバックグラウンドタスクを実装した場合。調査した後、私はdispatcherTimerの代わりにThreadPoolTimerを使うことを提案しました。
ThreadPoolTimer timer;
// for displaying time only
private void CurrentPlayer_MediaOpened(MediaPlayer sender, object args)
{
_clockTimer_Tick(timer);
}
private async void _clockTimer_Tick(ThreadPoolTimer timer)
{
var dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher;
await dispatcher.RunAsync(
CoreDispatcherPriority.Normal,() =>
{
// Your UI update code goes here!
if (CurrentPlayer.NaturalDuration.TotalSeconds > 0)
{
TimeSpan currentPos = CurrentPlayer.Position;
var currentTime = string.Format("{0:00}:{1:00}", (currentPos.Hours * 60) + currentPos.Minutes, currentPos.Seconds);
CurrentPosition.Text = currentTime;
}
});
}
これは明らかに動作していない:
は、私が( Clock program employing ThreadPoolTimer C# uwpこのソリューション以下)、このコードを書いてみました。アプリはUIを更新せずにメソッドに入ります。私は実際にtimer
がすべきことを理解していません。どのようにそれを実行させるためのアイデア?
は、「それは私に例外を与えた」適切な問題の説明ではありません。 –
'ThreadPoolTimer.CreatePeriodicTimer(_clockTimer_Tick、TimeSpan.FromMilliseconds(1000));を使用します。 'タイマーを作成する – Archana
この質問にも私を助けることができますか? http://stackoverflow.com/questions/37511936/using-mediatransportcontrols-with-backgroundmediaplay-in-background-audio-task-u – yalematta