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"); } }
3 Réponses :
Je vois quelques problèmes dans le code partagé:
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.
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. 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. 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)); }
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"); }