Как запустить таймер, когда приложение свернуто или работает в фоновом режиме (универсальное приложение С# для Windows 10)

Ранее я создал приложение таймера и секундомера для Windows Phone 8.1, но оно не работает в фоновом режиме или за экранами блокировки. В настоящее время я обновляю это для универсального приложения Windows 10 и мог бы помочь реализовать эти функции.


person XCdev    schedule 02.09.2015    source источник
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
comment
это очень хорошо работает для секундомера в приложении, но у него также есть еще одна опция, как обратный отсчет, который отключает будильник, когда он достигает нуля, есть ли у вас какие-либо предложения по этому поводу или вы считаете, что это должно быть фоновой задачей - person XCdev; 05.09.2015
comment
Проблема с фоновыми задачами заключается в том, что они могут выполняться только в течение ограниченного периода времени и только время от времени. В качестве обходного пути вы можете попробовать создать фоновую звуковую задачу (которая работает постоянно) и просто не воспроизводить в ней музыку. Я не уверен на 100%, сработает ли это, и сможете ли вы оттуда делать такие вещи, как тосты. - person Matt; 06.09.2015
comment
Вместо DateTime.Now можно использовать DateTie.UtcNow, что решит проблему смены часового пояса телефона. - person Barnstokkr; 21.12.2015