RUDE

Приложение Xamarin показывает пустую страницу во время цикла

Я делаю приложение для Android на Xamarin и хочу, чтобы этот код повторялся снова и снова. Но когда он зацикливается, он буквально ничего не показывает

public MainPage()
{
    InitializeComponent();
    for (int i = 0; i < 100; i++)
    {
        Thread.Sleep(2000);
        string app = "notepad";
        HttpClient httpClient = new HttpClient();
        var result = httpClient.GetAsync("LINK/ob/ob.php?text=" + app).Result;
        var contents = result.Content.ReadAsStringAsync().Result;

        string decider = contents.ToString();
        if (decider.Length > 7)
        {
            van.Text = "The " + app + " is ON";
            van.TextColor = Xamarin.Forms.Color.Green;
        }
        else
        {
            van.Text = "The " + app + " is off";
        }
    }

}

32
1

Ответ:

Решено

во-первых, не делайте этого в конструкторе. Это гарантирует, что ваша страница не будет отображаться до тех пор, пока код не завершится.

во-вторых, вместо того, чтобы делать это в цикле с Thread.Sleep(), используйте вместо этого таймер

Timer timer;
int counter;

protected override void OnAppearing()
{
    timer = new Timer(2000);
    timer.Elapsed += OnTimerElapsed;
    timer.Enabled = true;
}

private void OnTimerElapsed(object sender, ElapsedEventArgs a)
{
  counter++;
  if (counter > 100) timer.Stop();

  // put your http request code here

  // only the UI code updates should run on the main thread
  MainThread.BeginInvokeOnMainThread(() =>
  {
    if (decider.Length > 7)
    {
        van.Text = "The " + app + " is ON";
        van.TextColor = Xamarin.Forms.Color.Green;
    }
    else
    {
        van.Text = "The " + app + " is off";
    }
  });
}