Фоновая служба постоянно работает в формах Xamarin - PullRequest
0 голосов
/ 07 декабря 2018

Я новичок в формах ксамарина.Я пишу приложение, и мне нужно создать функцию, которая позволит непрерывно вызывать api для проверки изменения данных, если есть какие-либо изменения, я что-то обработаю.Я ищу решение, но ничего, пожалуйста, помогите мне :( Тема идея?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вы можете использовать Класс таймера для вашей проблемы.

0 голосов
/ 07 декабря 2018

Хорошо, прежде всего, вам нужно опросить API, чтобы получить данные, которые вам нужно проверить.Для этого вы можете реализовать мой класс PollingTimer.cs:

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

namespace CryptoTracker.Helpers
{
    /// <summary>
    /// This timer is used to poll the middleware for new information.
    /// </summary>
    public class PollingTimer
    {
        private readonly TimeSpan timespan;
        private readonly Action callback;

        private CancellationTokenSource cancellation;

        /// <summary>
        /// Initializes a new instance of the <see cref="T:CryptoTracker.Helpers.PollingTimer"/> class.
        /// </summary>
        /// <param name="timespan">The amount of time between each call</param>
        /// <param name="callback">The callback procedure.</param>
        public PollingTimer(TimeSpan timespan, Action callback)
        {
            this.timespan = timespan;
            this.callback = callback;
            this.cancellation = new CancellationTokenSource();
        }

        /// <summary>
        /// Starts the timer.
        /// </summary>
        public void Start()
        {
            CancellationTokenSource cts = this.cancellation; // safe copy
            Device.StartTimer(this.timespan,
                () => {
                    if (cts.IsCancellationRequested) return false;
                    this.callback.Invoke();
                    return true; // or true for periodic behavior
            });
        }

        /// <summary>
        /// Stops the timer.
        /// </summary>
        public void Stop()
        {
            Interlocked.Exchange(ref this.cancellation, new CancellationTokenSource()).Cancel();
        }
    }
}

Теперь, когда вы добавили таймер опроса в свой проект, вы должны перейти на страницу контента, с которой вы хотите опросить.Вот псевдокод того, как должна выглядеть ваша страница контента:

namespace YourApp.Views
{
    public class MainPage : ContentPage
    {

        PollingTimer timer;
        public MainPage ()
        {
            //PUT UI CODE HERE

            Content = layout;
            //Instantiate Polling timer to call handleaction every 5 seconds
            timer = new PollingTimer(TimeSpan.FromSeconds(5), HandleAction);

        }


        /// <summary>
        /// When the page enters the users view, this procedure is called.
        /// </summary>
        protected override void OnAppearing()
        {
            base.OnAppearing();
            //Handle action and start your timer
            HandleAction();
            timer.Start();
        }

        /// <summary>
        /// When the page disappears from the users view this procedure is called.
        /// </summary>
        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            //Stop your timer
            timer.Stop(); //Stop the timer
        }


        /// <summary>
        /// Callback for the timer.
        /// </summary>
        void HandleAction()
        {
            //Make call to your api to get data
            //Compare data with data you currently have
            // Do whatever you want.
        }

Надеюсь, это вам поможет.Дайте мне знать, если вам нужна дополнительная помощь:)

...