我正在爲Windows Phone創建一個定時器應用程序,並且我試圖讓它如此,以便如果定時器的剩餘時間爲零,不管應用程序是否處於活動狀態,處於非活動狀態或處於鎖定狀態,BackgroundAudioPlayer都將播放。WP7/8在後臺/鎖定屏幕中調用DispatcherTimer標記事件
目前,我的問題是,當應用程序未處於活動狀態時,tick事件實際上不會執行任何操作。一旦用戶重新進入應用程序,tick事件就會運行,直到他們本來會有的地步,但是聲音效果(或其他任何事情)實際上不會播放,除非應用程序處於活動狀態,或者切換到活動狀態。
我有我的Page.xaml.cs
:
PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;
相關的代碼是:
void dispatcherTimer_Tick(object sender, EventArgs e)
{
var remaining = this.EndTime - DateTime.Now;
int remainingSeconds = (int)remaining.TotalSeconds;
this.timeSpan.Value = TimeSpan.FromSeconds(remainingSeconds);
if (remaining.TotalSeconds <= 0)
{
this.dispatcherTimer.Stop();
button1.Visibility = Visibility.Collapsed;
button6.Visibility = Visibility.Visible;
this.EndTime = DateTime.MinValue;
this.timeSpan.Value = TimeSpan.FromSeconds(0);
BackgroundAudioPlayer.Instance.Play();
}
}
我能做些什麼使蜱事件運行,而應用程序是鎖屏或其他下明智不活躍?
我這樣做了,它現在可以在鎖定屏幕下工作,但在應用程序未處於活動狀態時無法工作。我假設完整的後臺工作僅限於第一方應用程序。 – ictuateAnomaly
DispatchTimer在UI線程上運行,因此System.Timers.Timer可能是一個更好的選擇(我沒有測試過這個,但似乎是一個可能的原因) –
@AdamPedley正在使用按鈕,所以它必須在UI線程上 – ad1Dima