Comment conserver ma forme C# qui, disons, est dans une boucle forcée, de se bloquer? Dois-je appeler Application.DoEvents(); avant la boucle ou après? D'après ce que j'ai entendu en utilisant la méthode DoEvents empêchera mon application de se bloquer.Application.DoEvents();
Répondre
Vous ne devez pas utiliser Application.DoEvents() pour que votre application reste active.
L'appel de cette méthode permettra à tous les messages Windows en attente d'être distribués. Cela signifie que si un utilisateur clique sur un bouton (ou effectue une autre interaction avec l'utilisateur), cette action sera traitée. Cela peut donc provoquer une réentrée. Si elles pressent le même bouton que celui qui a causé la boucle que vous traitez, vous finirez par avoir la routine appelée à nouveau avant que vous ayez fini! Au lieu de cela, vous devez utiliser un thread BackgroundWorker pour effectuer le long processus, puis une fois l'action terminée, effectuez toutes les actions supplémentaires requises. Par exemple, une fois que vous appuyez sur un bouton, vous démarrez le thread de travail, puis vous désactivez le bouton afin qu'il ne puisse plus être pressé. Une fois le thread de travail terminé, vous activez à nouveau le bouton.
Il existe plusieurs façons, cela (DoEvents) force la pompe à messages pour traiter les messages. Certaines personnes mettent un Thread.Sleep à la fin d'une boucle (toujours à l'intérieur de la boucle) dans un thread. Que faites-vous exactement dans votre fil, car il pourrait y avoir une meilleure façon d'atteindre votre objectif globalement?
Si le processus est à l'origine de l'interface utilisateur de verrouiller pour une quantité inacceptable de temps, essayez d'utiliser un fil séparé (soit créer, utiliser le pool de threads, ou utiliser la classe BackgroundWorker.
- 1. Accrocher la méthode Application.DoEvents dans VB.NET
- 2. Actualiser tous les contrôles sur le formulaire
- 3. Comment se fait-il que mon code fonctionne quand j'utilise un MessageBox.Show() entre et ne fonctionne pas sans cela?
- 4. TCP Freezing avec VB.NET
- 5. Meilleure pratique pour les services Web
- 6. Redim ne supprime que des données, ne supprime pas les nœuds
- 7. WPF mettre à jour l'interface utilisateur avec un certain délai
- 8. C# problème de fermeture de mon petit jeu lorsque l'événement de fermeture de formulaire est déclenché
- 9. flux un pdf à un objet webbrowser .net sur une winform
- 10. Comment est-ce que je garde un formulaire en blanc pendant que mon programme travaille sans utiliser un fond d'écran?
- 11. Directory.GetFiles garder la dernière fois d'accès
- 12. erreur de restriction sur les messages entre SQLSERVER et dot.net
- 13. Barre de progression lors du chargement de fichier XML
- 14. Pourquoi mon DataGridviewColumn n'accepte-t-il pas les modifications à ce stade?
- 15. Intermittente DefinitionInvalidException avec Windows Forms ReportViewer 2008
- 16. C# Force Form Focus
- 17. Comment animer en douceur l'emplacement de Windows Forms à différentes vitesses?
- 18. TcpServer - Envoyer et recevoir des données