Je suis actuellement confronté à un problème, il faudrait que lors du chargement des données (via webservices pour le premier chargement puis Json pour les autres chargement si pas de màj de données) que la MainPage.xaml ne se charge pas.
Je souhaiterais faire de la sorte car je vérifie au lancement de l'application si elle a été mise à jour ou non en testant la version de l'assembly et la version que je stock en base de données.
J'ai tout le code de chargement des données dans le fichier App.xaml.cs or, celui-ci arrive t-il à peine au chargement de la configuration que la suite du chargement de l'appli continue en allant directement vers MainPage.xaml.cs dans laquelle je suis censé tester la version du programme et bloquer si l'application n'est pas à jour.
Cela pose bien entendu des problème vu qu'aucune donnée à ce moment là n'est chargée !
Partie de App.xaml.cs
Partie de MainPage.xaml.cs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 protected override async void OnStart() { // Handle when your app starts HttpClient Client = new HttpClient(); GestFiles f = new GestFiles(); string LastUpdate = ""; string Dte = ""; /* Recherche de la dernière date de mise à jour des données Json */ if (f.FileExists(Constants.LAST_UPDATE)) { LastUpdate = f.LoadText(Constants.LAST_UPDATE); first = false; } else first = true; /* Chargement de la table de configuration. * S'il n'y a pas de réseau mais qu'un fichier de configuration existe en local, on le charge. * Sinon on se connecte au réseau et on télécharge la configuration en ligne pour déterminer * s'il y a eu une modification des listes et du catalogue. */ if ((Connectivity.NetworkAccess == NetworkAccess.None || Connectivity.NetworkAccess == NetworkAccess.Unknown) && f.FileExists(Constants.CONFIG_FILE)) { var rootObject = JsonConvert.DeserializeObject<List<Config>>(f.LoadText(Constants.CONFIG_FILE)); PackQSE_Configuration = rootObject; } else { try { var contenu = await Client.GetStringAsync(Constants.GET_UrlConfig); var rootObject = JsonConvert.DeserializeObject<List<Config>>(contenu); PackQSE_Configuration = rootObject; f.SaveText(Constants.CONFIG_FILE, contenu);
Si quelqu'un a une solution ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 protected override async void OnAppearing() { base.OnAppearing(); ImageError.IsVisible = false; if ((Connectivity.NetworkAccess == NetworkAccess.None || Connectivity.NetworkAccess == NetworkAccess.Unknown) && App.first) { await DisplayAlert( "Erreur réseau...", "Aucune connexion n'a été détectée.\n\nL'application doit avoir un accès au réseau SDEA pour son premier lancement !", "Ok"); btnCommandesEPI.IsEnabled = false; btnDeclaration.IsEnabled = false; } else { VersionTracking.Track(); if (App.PackQSE_Configuration.Find(x => x.nom_parametre == "VERSION_APPLI").valeur_parametre != VersionTracking.CurrentVersion) { await DisplayAlert( "Mise à jour nécesaire...", "L'application a détectée une mise à jour\n\nVeuillez mettre à jour l'application avant de continuer !", "Ok"); btnCommandesEPI.IsEnabled = false; btnDeclaration.IsEnabled = false; } else { btnCommandesEPI.IsVisible = true; btnDeclaration.IsVisible = true; } } }
[EDIT]
J'ai essayé avec l'appel à ConfigureAwait(false) dans l'appel à var contenu = await Client.GetStringAsync(Constants.GET_UrlConfig) mais cela n'a pas eu l'effet escompté.
[/EDIT]
Partager