1
votes

Les alertes Acr.UserDialogs sont ignorées

Je pense que cela a quelque chose à voir avec mes tâches asynchrones dans ma méthode, mais je ne comprends pas pourquoi une de mes trois alertes s est affichée et les autres non.

Celui à la fin de ma condition if est affiché et je veux que l'utilisateur commette la première alerte et ensuite il continuera.

Avez-vous une idée?

async void CreateInitialTxts()
    {
        if (InternetConnectionExists)
        {
            UserDialogs.Instance.Alert("txt", "txt", "txt");

            var dataDevices = await downloadDevices.GetDevicesTxt();
            fileHandler.CreateTxt("devices.txt", dataDevices);
            var dataGasStations = await downloadGasStations.GetGasStationsTxt();
            fileHandler.CreateTxt("gasstations.txt", dataGasStations);
            fileHandler.CreateTxt("initialsync.txt", "false");

            UserDialogs.Instance.Alert("txt", "txt", "txt");
        }
        else
        {
            UserDialogs.Instance.Alert("txt", "txt", "txt");
        }
    }


0 commentaires

3 Réponses :


0
votes

Je vois quelques problèmes dans le code partagé:

  1. async void CreateInitialTxts () - ne renvoie jamais un void à partir d'une méthode async, mais Task ou Task < / code>. Vous trouverez ici de nombreux fils de discussion sur les articles SO et expliquant cela. En bref, c'est une mauvaise pratique car il peut être difficile d'attraper une exception.
  2. Remplacez UserDialogs.Instance.Alert par UserDialogs.Instance.AlertAsync et attendez-le. Vous pouvez également envisager une Invite au lieu d'une Alerte si vous souhaitez permettre à l'utilisateur d'approuver l'action à venir.
  3. UserDialogs.Instance.Alert ceci est un couplage serré, envisagez d'encapsuler les fonctionnalités nécessaires par une interface et utilisez cette interface au lieu d'une implémentation concrète.

0 commentaires

0
votes

Vous devez appeler UserDialogs.Instance.Alert dans Device.BeginInvokeOnMainThread:

void DisplayDialog(String title, String message, String buttonText)
{
    Device.BeginInvokeOnMainThread(() =>
        UserDialogs.Instance.Alert(title: title, message: message, okText: buttonText));
}


0 commentaires

0
votes

vous pouvez afficher le deuxième dialogue après avoir cliqué sur "Ok" du premier dialogue, comme ceci:

  private void Show_Dialog2()
    {
        UserDialogs.Instance.Alert("txt", "txt", "txt");
    }

lorsque vous cliquez sur "ok" du premier dialogue, affichez le deuxième dialogue: p>

  if (InternetConnectionExists)
    {
        //Create an AlertConfig
        var  config = new AlertConfig();
        config.Message = "txt";
        config.Title = "txt";
        config.OkText = "txt";

        //create action of "ok"
        config.OnAction += Show_Dialog2;
        UserDialogs.Instance.Alert(config);          

    }
    else
    {
        UserDialogs.Instance.Alert("txt", "txt", "txt");
    }


0 commentaires