System.Threading.Timer не стреляет - PullRequest
       20

System.Threading.Timer не стреляет

0 голосов
/ 06 сентября 2018

Я пишу приложение, которое будет отправлять данные о местоположении каждые x секунд и работать в фоновом режиме. Я вызываю следующий метод.

    public void StartListening()
    {
        UpdateGpsService();
        if(CLLocationManager.LocationServicesEnabled)
        {
            locationManager.DesiredAccuracy = 10;

            nint taskId = UIApplication.SharedApplication.BeginBackgroundTask(() =>
           {
               timer = new Timer((o) =>
               {
                   CLLocation location = locationManager.Location;
                   Nmea nmea = new IOSNmea(location);
                   Gprmc gprmc = new Gprmc();
                   gprmc.url = this.Url;
                   gprmc.Id = this.DeviceId;
                   gprmc.GprmcString = nmea.ToString();

               }, null, 0, UpdateInterval * 1000);
           });

            App.Database.SaveItemAsync(new TodoItem() { key = LOCATOR_SERVICE_ID, value = taskId.ToString() });
        }
    }

Однако, похоже, что он не вызывает код внутри обратного вызова таймера. Я пытался установить точку останова, но она никогда не вызывается. Что-то явно не так с моим кодом? Спасибо за любую помощь.

1 Ответ

0 голосов
/ 06 сентября 2018

BeginBackgroundTask только сообщает iOS, что вы запускаете долго выполняющуюся задачу, и обработчик не для выполнения этой задачи, НО это обработчик завершения , который вызывается когда ОС собирается закрыть его ...

Timer timer = null;
nint taskId = UIApplication.SharedApplication.BeginBackgroundTask(() =>
{
    // Clean up as the background task is begin shutdown by iOS
    timer?.Dispose();
});
timer = new Timer((o) =>
{
    Console.WriteLine("Timer Update");
}, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));

// Must call EndBackgroundTask when you are done with this...
// UIApplication.SharedApplication.EndBackgroundTask(taskId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...