Simple, non-blocage de la façon de dormir?
J'ai cherché sur google et lisez un peu les discussions ici, mais je n'ai pas trouvé un moyen simple d'avoir une VB.Net demande de sommeil pour un peu de temps et de toujours garder à l'application de réactivité:
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Threading.Thread
[...]
''#How to keep screen frop freezing?
While True
ListBox1.Items.Clear()
ListBox1.Items.Add("blah")
''#Not much difference
ListBox1.Refresh()
''#Wait 1mn
Sleep(60000)
End While
Est-il vraiment pas simple, non-blocage solution pour avoir un VB.Net demande d'attendre quelques secondes?
Merci.
Quel est le but de la veille? Vous voulez dormir, ou vous voulez qu'il soit réactif. Si ce que vous essayez de faire est quelque chose qui se produit à intervalles réguliers, dites-le.
Je suis à la capture d'écran d'une page web à chaque minute, et souhaite que la demande de pause à chaque minute, sans l'écran de l'application de la congélation. Est-ce toujours OK pour utiliser la fonction DoEvents ou est-il recommandé d'utiliser une Minuterie à la place?
Voir i nik e de commentaire ci-dessous. On dirait que vous êtes mieux lotis avec une minuterie.
Merci les gars, je vais utiliser une Minuterie à la place.
Assurez-vous que vous savez ce qui arrive quand une itération prend plus d'un intervalle de minuterie. Vous pourriez vous retrouver avec deux Minuterie-Événement fonctions en cours d'exécution dans le même temps (même si l'ancien VB5 minuteries empêché que, automatiquement, je pense).
Je suis à la capture d'écran d'une page web à chaque minute, et souhaite que la demande de pause à chaque minute, sans l'écran de l'application de la congélation. Est-ce toujours OK pour utiliser la fonction DoEvents ou est-il recommandé d'utiliser une Minuterie à la place?
Voir i nik e de commentaire ci-dessous. On dirait que vous êtes mieux lotis avec une minuterie.
Merci les gars, je vais utiliser une Minuterie à la place.
Assurez-vous que vous savez ce qui arrive quand une itération prend plus d'un intervalle de minuterie. Vous pourriez vous retrouver avec deux Minuterie-Événement fonctions en cours d'exécution dans le même temps (même si l'ancien VB5 minuteries empêché que, automatiquement, je pense).
OriginalL'auteur Gulbahar | 2010-02-10
Vous devez vous connecter pour publier un commentaire.
Appel ResponsiveSleep pour mettre en pause un morceau de code, tout en gardant l'application assez réactif. Pour rendre l'application plus réactive iHalfSeconds pourraient être modifiés afin de dixièmes ou centièmes de seconde
J'ai eu des problèmes avec
Application.DoEvents()
. Voir ici, par exemple.c'est que
:
la construction de quelque chose de VB-spécifique? Comment regarder en c#?OriginalL'auteur user408874
Est-ce WinForms ou WPF?
Si c'est WinForms vous pouvez simplement utiliser une minuterie au lieu d'une boucle while. Alors votre application serait encore être réactif et de déclencher des événements.
Dans WPF, je pense que vous avez à faire votre propre minuterie basé sur la DispatchTimer classe.
Je viens d'ouvrir un projet très rapide et ne vois pas de Minuteur de contrôles dans le concepteur, donc il pourrait très bien être, j'ai juste jamais eu besoin d'utiliser l'une dans WPF. Une recherche rapide sur google me fait penser cependant qu'il n'est pas disponible (social.msdn.microsoft.com/forums/en-US/wpf/thread/...).
Il n'a pas à être un contrôle est-il? Vous pouvez utiliser le Système.Les minuteries.Minuterie ou d'un Système.Le filetage.La minuterie dans le code.
OriginalL'auteur Seth Moore
OriginalL'auteur Gbolahan
La Minuterie suggestion est vraiment la meilleure façon de le faire. Mais si
DoEvents
fonctionne encore (je n'ai pas fait de VB depuis la 5.0), vous pouvez le faire:Ce serait faire 600 dort de .1 chaque seconde, avec un DoEvents entre chaque pour gérer les événements en cours. Le .1 deuxième devrait être un bon compromis entre réactivité (les événements sont gérés au sein .1 seconde) et le PROCESSEUR de la consommation (le faire trop vite et que votre application va commencer à consommer une quantité importante de temps CPU, même pendant l'attente).
Je ne sais pas pourquoi cela a été downvoted. Les fonctions sont appelées Application.DoEvents et du Fil.Dormir dans .NET, mais n'importe qui avec une mise à jour de MSDN aurait trouvé. Il convient de rappeler que la fonction DoEvents peut conduire à toutes sortes de comportement bizarre (par exemple, si le formulaire est fermé tandis que la fonction est en cours d'exécution ou si la fonction DoEvents appelle la même fonction.) Mais vous avez bien dit que ce n'est pas le moyen idéal de le faire.
Je ne suis pas le downvoter, mais DoEvents n'est pas une bonne pratique. Il provoque des problèmes si la méthode n'est pas écrit correctement pour tenir compte de la ré-entrée.
OriginalL'auteur Wim
Vraiment, la solution est de deux ordres:
1.) Utilisez une minuterie au lieu de dormir, le sommeil n'est comme il le dit, les causes de la mise en veille du thread.
2.) Utiliser le multi-threading et de votre écran démolition de la fonction exécuter dans son propre thread, cela va grandement améliorer la réactivité de votre application.
Est un thread safe sleep fonction qui va interrompre le thread en cours pour le moment, donc si vous utilisez le sommeil, vous pouvez le faire dans un multi-threading de l'environnement et permet de garder le reste de la réactivité de votre application que vous êtes seulement de sommeil une ramifiée thread, pas le thread principal.
OriginalL'auteur Jarrod Christman
Comment sur ce simple morceau de code 🙂
Utilisation
Async
déclarées sous et puis mettreAwait Task.Delay(milliseconds)
au lieu deThread.Sleep(milliseconds)
OriginalL'auteur M9J_cfALt
U sont de rendre le Thread d'INTERFACE utilisateur Qui remise de la forme de sommeil.
Si tu veux faire ur demande réactif,faites d'abord une méthode qui, d'ajouter les articles dans la vue liste, et lorsque ur formulaire se charge de démarrer cette méthode à l'aide de fil,maintenant, utilisez le sommeil, pour faire ur la liste d'affichage de fil de sommeil,et d'ur, qui sera en état de réactivité..
OriginalL'auteur KrazzyRider
C'est pour pas VB VBA
OriginalL'auteur Jimva