2017-03-28 2 views
0

mon application en utilisant le serveur SQL est situé sur un serveur. mon problème est un lors de l'utilisation de cette application, geler l'application lorsque vous obtenez des données du serveur! Quelle est votre solution proposée?gel application quand obtenir des données à partir du serveur SQL en ligne

+0

Vous devriez fournir un peu de code, nous ne pouvons pas deviner les solutions pour vous. Aussi, avez-vous essayé quelque chose? Peut-être nous fournir quelques-uns de vos tests pour vérifier où vous avez mal tourné. – Nicolas

Répondre

0

Sans plus d'information sur ici des conseils généraux:

exécuter votre requête sur un thread (utiliser une tâche si moderne), puis lorsque le fil obtient ses données de retour en arrière sur appeler thread principal/UI. Cela empêchera votre interface utilisateur de se bloquer lors de l'interrogation des données. Vous voudrez peut-être également démarrer un indicateur de «spinner» ou de «chargement» sur le thread de l'interface utilisateur afin que l'utilisateur sache attendre et ne claque pas en essayant de charger les données encore et encore. Assurez-vous également d'inclure une gestion des erreurs dans votre thread de requête, donc si les choses vont mal, vous pouvez récupérer et alerter (messagebox, écrire dans le journal, tout ce que vous devez faire).

1

Il semble que vous exécutiez votre requête de base de données à partir du thread de l'interface utilisateur. Peut-être, la requête est en cours d'exécution dans un bouton "clic" gestionnaire d'action?

Le thread d'interface utilisateur est un thread dans lequel la boucle de message de l'interface utilisateur s'exécute et traite les événements de l'interface utilisateur (par exemple, les clics sur les boutons, le redimensionnement des fenêtres, etc.). Si vous exécutez une tâche longue dans le thread de l'interface utilisateur, tous les autres messages de l'interface utilisateur seront traités jusqu'à ce que la tâche soit terminée. En conséquence, l'interface utilisateur aura l'air figée.

Les appels de base de données sont assez lents et il est préférable de les exécuter en dehors du thread d'interface utilisateur. Une solution consiste à faire tourner un nouveau thread, en fournissant une méthode de rappel à appeler une fois l'exécution de la requête a été complétée.

Une meilleure approche consiste à utiliser async/await. Vous devrez définir une méthode async qui effectue un appel de base de données. Et puis attendez cette méthode dans votre thread d'interface utilisateur. Veuillez nous montrer comment vous récupérez les données d'une base de données et nous vous donnerons plus de détails sur la façon de les implémenter sans bloquer l'interface utilisateur.