Почему System.Timers.Timer не работает когда экран заблокирован?

делаю приложение xamarin native пока только для ios и столкнулся с проблемой когда прилагу сварачиваешь или блокируешь экран таймер останавливается, что можно сделать? можно добавить в UIApplication.SharedApplication.BeginBackgroundTask() но не совсем понятно, что добавлять, к тому же мой таймер во ViewModel и он байндится к label в котором отображается время) Спасибо заранее))

    private void SetTimer()
    {
               
        Timer = new Timer
        {
            Interval = 1000,
            Enabled = true
        };
            
        Timer.Elapsed += TimerElapsed;
        Timer.Start();
    }

    private void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        if (_seconds == 59)
        {
            _minutes++;
            _seconds = 0;
        }

        Time = _minutes.ToString("00") + ":" + _seconds.ToString("00");
        _seconds++;
    }

        

Ответы (1 шт):

Автор решения: Ivan Kramarchuk

Вместо использования внутри таймера суммирования количества минут и секунд, рассчитывайте разницу между timestamp начала работы таймера и текущим timestamp.

Тогда вам будет неважно, что операционная система "заморозит" приложение, т.к. после возобновления работы приложения, вы рассчитаете правильное время. Чтобы пользователь не успел увидеть "старые" значения при разблокировки телефона или возвращении к приложению, уменьшите интервал таймера, например до 10 мс, вместо 1 секунды.

Привести пример кода к сожалению не могу, т.к. нет Xamarin, но проблема скорее алгоритмическая. Это будет работать и для iOS и для Android.

→ Ссылка