Таймеры

Последнее обновление: 11.01.2021

Применить таймер в Xamarin Forms можно разными способами. Первый способ представляет использование метода Device.StartTimer(), который определен в пространстве имен Xamarin.Forms. Он имеет следующее определение:

Device.StartTimer(TimeSpan interval, Func<bool> callback);

Первый параметр задает временный интервал, через который будет действовать метод из второго параметра - функция обратного вызова. Причем эта функция должна возвращать булевое значение: true - если надо, чтобы таймер продолжал выполнение, и false, если надо, чтобы таймер остановился. Например:

using System;
using Xamarin.Forms;

namespace HelloApp
{
    public partial class MainPage : ContentPage
    {
        Button timerButton;
        bool alive = true;
        public MainPage()
        {
            timerButton = new Button
            {
                VerticalOptions = LayoutOptions.Center,
                HorizontalOptions = LayoutOptions.Center,
                FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Button))
			};
            timerButton.Clicked += TimerButton_Clicked;
            
            Content = timerButton;

            Device.StartTimer(TimeSpan.FromSeconds(1), OnTimerTick);
        }
        private bool OnTimerTick()
        {
            timerButton.Text = DateTime.Now.ToString("T");
            return alive;
        }
        
        private void TimerButton_Clicked(object sender, EventArgs e)
        {
            if(alive==true)
            {
                alive = false;
            }
            else
            {
                alive = true;
                Device.StartTimer(TimeSpan.FromSeconds(1), OnTimerTick);
            }
        }
    }
}

Здесь определена кнопка, на котороую выводится текущее время. Для вывода времени запущен таймер, причем он срабатывает раз в секунду (TimeSpan.FromSeconds(1)). По таймеру срабатывает метод OnTimerTick, который возвращает значение переменной alive. Через нажатие на кнопку мы можем проконтроллировать значение этой переменной и тем самым остановить или снова запустить таймер.

Таймеры в Xamarin Forms

Еще одну форму таймера представляет симуляция таймера с помощью временной задержки Task.Delay():

using System;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace HelloApp
{
    public partial class MainPage : ContentPage
    {
        Button timerButton;
        bool alive = true;
        public MainPage()
        {
            timerButton = new Button
            {
                VerticalOptions = LayoutOptions.Center,
                HorizontalOptions = LayoutOptions.Center,
                FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Button))
			};
            timerButton.Clicked += TimerButton_Clicked;
            
            Content = timerButton;

            DisplayTime();
        }
        private async void DisplayTime()
        {
            while (alive)
            {
                timerButton.Text = DateTime.Now.ToString("T");
                await Task.Delay(1000);
            }
        }
        private void TimerButton_Clicked(object sender, EventArgs e)
        {
            if(alive==true)
            {
                alive = false;
            }
            else
            {
                alive = true;
                DisplayTime();
            }
        }
    }
}

Этот практически аналогичный пример за тем исключением, что тут явным образом запускается асинхронный метод DisplayTime(), который отрабатывает во вторичном потоке. Поэтому, несмотря на то, что он запускается в конструкторе, после завершения конструктора он продолжит работу.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850