Ранее я создал приложение таймера и секундомера для Windows Phone 8.1, но оно не работает в фоновом режиме или за экранами блокировки. В настоящее время я обновляю это для универсального приложения Windows 10 и мог бы помочь реализовать эти функции.
Как запустить таймер, когда приложение свернуто или работает в фоновом режиме (универсальное приложение С# для Windows 10)
comment
Рассмотрите возможность использования фонового потока, если это возможно.
- person Mohammad Chamanpara   schedule 02.09.2015
Ответы (1)
Может показаться заманчивым попробовать сделать это в фоновой задаче, но для простой задачи это очень сложно.
Я бы предложил записать DateTime, когда они начали запись:
DateTime _startDateTime;
void Start()
{
_startDateTime = DateTime.Now;
}
Затем выполните свой обычный код синхронизации (предположительно с DispatcherTimer
), который будет запускать метод каждые x миллисекунд:
void UpdateTime()
{
TimeSpan totalTime = DateTime.Now.Subtract(_startDateTime);
// Update UI
}
Теперь, если пользователь свернет приложение, код перестанет выполняться, однако, когда вы вернетесь, математика в UpdateTime()
использует абсолютное значение _startDateTime
, поэтому не имеет значения, были ли вы свернуты на час или на неделю - как только UpdateTime()
работает, он правильно отработает прошедшее время. Разве что минимизируют и меняют время на телефоне, но с этим особо ничего не поделаешь ;-).
person
Matt
schedule
02.09.2015
это очень хорошо работает для секундомера в приложении, но у него также есть еще одна опция, как обратный отсчет, который отключает будильник, когда он достигает нуля, есть ли у вас какие-либо предложения по этому поводу или вы считаете, что это должно быть фоновой задачей
- person XCdev; 05.09.2015
Проблема с фоновыми задачами заключается в том, что они могут выполняться только в течение ограниченного периода времени и только время от времени. В качестве обходного пути вы можете попробовать создать фоновую звуковую задачу (которая работает постоянно) и просто не воспроизводить в ней музыку. Я не уверен на 100%, сработает ли это, и сможете ли вы оттуда делать такие вещи, как тосты.
- person Matt; 06.09.2015
Вместо
DateTime.Now
можно использовать DateTie.UtcNow
, что решит проблему смены часового пояса телефона.
- person Barnstokkr; 21.12.2015