Сообщение не обновляется в UIAlertController с помощью таймера - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь добавить сообщение таймера обратного отсчета в UIAlertController, таймер срабатывает правильно и регистрируется в консоли каждый раз, когда он запускается. Однако сообщение alertController не обновляется. Я пробовал обновить сообщение вне таймера, оно работает. Не уверен, почему он не работает внутри таймера. Вот мой код:

var ttimer = new System.Timers.Timer(1000);

alertController = UIAlertController.Create("title", "initial message", UIAlertControllerStyle.Alert);
using (var cancelAction = UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, (t) => { ttimer.Stop(); ttimer.Dispose(); }))
{
    alertController.AddAction(cancelAction);
}
PresentViewController(alertController, true, null);

var counter = 5; // 5 seconds count down timer, dismiss alert after 5 seconds

ttimer.Elapsed += (Object source, ElapsedEventArgs e) =>
{
    Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
        e.SignalTime); // This logs to the console fine
    if (counter > 0)
    {
        counter--;
        alertController.Message ="new message"; // This doesn't work
    }
    else
    {
        alertController.DismissViewController(false, null); // This doesn't work
        ttimer.Stop();
        ttimer.Dispose();
    }
};

ttimer.AutoReset = true;
ttimer.Enabled = true;

alertController.Message = "new message for testing"; // This works

Что я сделал не так? Это в Xamarin iOS / C#.

1 Ответ

0 голосов
/ 29 мая 2020

событие Elapsed не происходит в основном потоке. Вы можете принудительно обновить пользовательский интерфейс до , используя поток пользовательского интерфейса

InvokeOnMainThread ( () => {
  alertController.Message ="new message";
});
...