Progrès “bar” à l'aide de threads dans vb.net
J'ai actuellement un programme qui s'exécute à plusieurs "intense" requêtes. J'ai ajouté une zone de texte et présenté des mises à jour de statut lorsqu'une requête a été de départ, eding et combien étaient de gauche. Ce serait suite à mon besoin, mais la zone de texte n'affiche rien jusqu'à ce que toutes les requêtes sont finis. Il affiche alors toutes les mises à jour à la fois. Je suis en supposant que la mise à jour de la zone de texte dans un autre thread, il permettrait de résoudre ce problème, et c'est là que je suis perdu. Comment puis-je utiliser un thread qui reçoit un message de la forme principale l'exécution de la requête, et d'afficher dans la zone de texte?
OriginalL'auteur Shawn | 2010-01-25
Vous devez vous connecter pour publier un commentaire.
La
BackgroundWorker
composant convient à votre besoin (exemple de code est là, dans la MSDN lien). Vous gérer sesDoWork
événement et effectuer la requête. Vous rapport les progrès accomplis par l'appel de saReportProgress
méthode. Pour afficher les progrès signalés, vous devez gérer sesProgressChanged
de l'événement et de mettre à jour l'INTERFACE utilisateur. De commencer la tâche en appelant leRunWorkerAsync
méthode de l'arrière-plan travailleur. À l'aide deBackgroundWorker
vous épargne manuellement le démarrage et l'arrêt des threads et de communiquer avec le thread d'INTERFACE utilisateur pour mettre à jour la barre de progression.Ah, je n'ai même pas penser à faire la requête dans un thread différent. Je vais essayer ça.
J'ai toujours le même problème! L'autre jour, j'ai répondu à une question avec la même réponse pointant vers la même url que quelqu'un d'autre, mais il était de 5 secondes plus rapide que moi lol
Ne semble pas l'empêcher d'autres personnes de répondre à la même chose que fait-il?
OriginalL'auteur Mehrdad Afshari
BackgroundWorker est une bonne méthode générale pour faire le travail intensif sur un thread d'arrière-plan. Mais, puisque votre question sonne comme vous faire des opérations de base de données, il peut être plus facile d'utiliser le la prise en charge native pour les opérations asynchrones dans ADO.Net. Vous pouvez utiliser rappels pour la barre de progression.
OriginalL'auteur MarkJ
La façon la plus simple de le faire est de faire usage de BackgroundWorker, la manipulation c'est DoWork événement et rendre compte des progrès à la ProgressBar avec ProgressChanged événement.
pour commencer:
rapport de progrès:
OriginalL'auteur Alex LE
En ajoutant à ce que Mehrdad et Alex posté, voici comment gérer l'événement soulevées par le
ReportProgess
méthode (ProgressChanged
) pour mettre à jour la barre de progression:OriginalL'auteur Justin R.