2014-03-25 23 views
0

我正在爲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(); 
     } 
    } 

我能做些什麼使蜱事件運行,而應用程序是鎖屏或其他下明智不活躍?

回答

0

Windows Phone對後臺工作有嚴格的限制。可能是你需要在鎖屏下工作的權限?

http://developer.nokia.com/community/wiki/Run_Windows_Phone_application_under_lock_screen

但它只有在鎖屏的應用程序保持活躍,但不是當用戶按下窗口或關閉您的應用程序。

+1

我這樣做了,它現在可以在鎖定屏幕下工作,但在應用程序未處於活動狀態時無法工作。我假設完整的後臺工作僅限於第一方應用程序。 – ictuateAnomaly

+0

DispatchTimer在UI線程上運行,因此System.Timers.Timer可能是一個更好的選擇(我沒有測試過這個,但似乎是一個可能的原因) –

+0

@AdamPedley正在使用按鈕,所以它必須在UI線程上 – ad1Dima