Что вы можете сделать, это реализовать мой специальный класс PollingTimer.cs:
using System;
using System.Threading;
using Xamarin.Forms;
namespace AppNamespace.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();
}
}
}
Тогда, что вы можете сделать, следуя тому, что на вашей странице вы хотите делать вызов каждые 5 секунд, в конструкторе в конце вы можете написать эту строку кода:
timer = new PollingTimer(TimeSpan.FromSeconds(5), liveScore);
Это будет запускать ваш метод каждые 5 секунд. Чтобы ваш метод работал с поллингтимером, вы должны отредактировать свой метод в void и вернуть значение в глобальную переменную, например, так:
//Make a global variable for your method to access
List<liveScoreData> globalLiveScore = new List<liveScoreData>();
public void liveScore()
{
var result = new List<liveScoreData>();
try
{
Guid guidSifre = Guid.NewGuid();
string guid = guidSifre.ToString();
string result = CreateMD5forChecksum(guid);
using (var client = new WebClient())
{
var values = new NameValueCollection();
values["result"] = result;
values["guid"] = guid;
var response = client.UploadValues("http://abcd.com/admin/LiveScore", values);
var responseString = Encoding.Default.GetString(response);
var responseResult = JsonConvert.DeserializeObject(responseString);
result = JsonConvert.DeserializeObject<List<liveScoreData>>(responseResult.ToString());
Mehmet.liveScoreDataList = result;
}
}
catch (Exception ex)
{
var exc = ex;
}
globalLiveScore = result;
}
Затем вы можете проверить свои данные в реальном времени другими способами. Затем в вашем методе OnAppearing вы можете запустить
timer.Start();
и в вашем методе OnDisappearing вы можете запустить
timer.Stop();
поиграйте с ним и посмотрите, сможете ли вы поставить его в лучшие места для оптимальной производительности и т. Д.