2014-01-12 2 views
1

У меня есть таймер в моем приложении в Windows Phone 7.1 реализована с использованиемКак получить таймер работает, даже если приложение работает в фоновом режиме или телефон заблокирован в Windows Phone

DispatcherTimer _timer; 

инициализируется

Sample._timer = new DispatcherTimer(); 
Sample._timer.Interval = new TimeSpan(0, 0, 1); 
Sample._timer.Tick += new EventHandler(Timer_Tick); 
Sample._timer.Start(); 

    private void Timer_Tick(object sender, EventArgs e) 
    { 

     double newValue = Sample.Value + 1.686; 
     if (newValue >= 100) 
      newValue = 0; 
     Sample.Value = newValue; 
     txtDigitalClock.Text = GetTime(); 
    } 
    public string GetTime() 
    { 
     time += TimeSpan.FromSeconds(1); 
     return string.Format("{0:D2}:{1:D2}:{2:D2}", time.Hours, time.Minutes, time.Seconds); 
    } 

Это работает нормально в нормальном состоянии

Вот моя проблема

1) Таймер не работает, когда телефон находится в заблокированном состоянии (экран расположен)

2) Таймер не работает, когда приложение работает в фоновом режиме (при нажатии кнопки запуска на телефоне Windows приложение переходит на задний план).

любая помощь будет принята с благодарностью ..

ответ

1

Для запуска вашего приложения (и таймера) в режиме блокировки вы должны отключить ApplicationIdleDetectionMode.
Если вы не отключили неработающая App остановится, как это сказано в MSDN:

This event (Deactivation) is also raised if the device’s lock screen is engaged, unless application idle detection is disabled.

Если вы хотите запустить таймер в фоновом режиме (., Например, после нажатия кнопки Пуск бутон), вы не будете в состоянии сделать это, как MSDN говорит:

When the user navigates forward, away from an app, after the Deactivated event is raised, the operating system will attempt to put the app into a dormant state. In this state, all of the application’s threads are stopped and no processing takes place, but the application remains intact in memory.

Чем больше проблема, когда ваше приложение захоронены - приложение не ramain (все) в памяти.

Вы можете попробовать сделать свою работу с Background Agents, но это уже другая история.

Также помните о Certification requirements, когда ваше приложение отключает Idle или использует фоновый агент.

Аналогичная проблема была here.

0

Я искал свой вопрос на гугле (Потому что я не в WinPhone) и нашел

http://stackoverflow.com/questions/8352515/ how-can-i-run-my-windows-phone-application-in-background

очевидно, это просто невозможно. Надеюсь, это ответит на ваш вопрос.

0

Пожалуйста, напишите ниже таймер инициализации линии

ApplicationIdleModeHelper.Current.HasUserAgreedToRunUnderLock = true; 
0

Я решил эту проблему путем сохранения исходного таймера значения на изолированном хранилище

IsolatedStorageSettings.ApplicationSettings.Add("TimerStarted",DateTime.UtcNow); 

И когда приложение активируется после перехода к фону, я буду искать это значение в изолированном хранилище и использовать его для отображения таймера

Смежные вопросы