Je suis un étudiant CompSci, et assez nouveau en C#, et je faisais un programme "Josephus Problem" pour une classe, et j'ai créé un bouton Exit qui appelle Application.Exit() pour quitter à tout moment, mais si C# travaille toujours sur la peinture et que le bouton est enfoncé, il lance ObjectDisposedExeception pour l'objet Graphics. Est-il un moyen d'empêcher cela?. Je pensais essayer {} ou changer un booléen pour dire au processus de peinture de s'arrêter avant de sortir, mais je veux savoir s'il y a une autre solution.Comment faire pour empêcher ObjectDisposedException en C# lors du dessin et de l'application se termine
Répondre
Cela ne devrait pas être possible. Si le bouton est créé sur le même thread que la fenêtre, ils partagent une pompe de message et le gestionnaire Paint ne peut pas être interrompu pour gérer le bouton de sortie. Le message indiquant que le bouton a été cliqué sera mis en file d'attente dans la file d'attente des messages du thread jusqu'à ce que le gestionnaire Paint retourne.
Généralement, vous devriez reporter la peinture au gestionnaire Paint (ou remplacer OnPaint) et partout ailleurs où vous devez mettre à jour l'écran, appelez la méthode Invalidate du contrôle. Cela indique à Windows qu'une zone doit être repeinte et, une fois tous les autres messages traités, génère un message WM_PAINT
qui appellera finalement OnPaint, qui à son tour lancera l'événement Paint.
Si vous animez, utilisez un System.Windows.Forms.Timer
pour déclencher chaque image plutôt que d'utiliser un fil. System.Threading.Timer
Les callbacks s'exécutent sur le pool de threads, ils sont donc toujours sur le mauvais thread pour manipuler l'interface utilisateur.
Vous devriez être appelé la méthode Close() du formulaire qui contient le bouton afin de fermer le formulaire de manière ordonnée. La fermeture du formulaire principal entraînera la sortie de l'application pour vous.
- 1. ostringstream et se termine
- 2. souris suivie du dessin en C#
- 3. Comment détecter quand l'application se termine?
- 4. Comment faire pour inverser les coordonnées lors du dessin dans le contexte?
- 5. Faire un programme de dessin
- 6. Comment faire pour que jQuery attende qu'un appel Ajax se termine avant qu'il ne retourne?
- 7. Comment faire pour empêcher Iframe hack
- 8. Comment faire pour entrer dans la DLL C/C++ de l'application C# lors du débogage
- 9. Comment faire pour que jQuery load() se termine avant fadeOut/fadeIn?
- 10. Comment faire pour empêcher l'événement ListBox.SelectedIndexChanged?
- 11. Démarrer le processus asynchrone et attendre qu'il se termine
- 12. urlsafe_b64encode se termine toujours par '='?:
- 13. indiquant quand un processus execl() se termine
- 14. UITableViewCell Dessin personnalisé et animation lors de la saisie du mode Edition/Réorganisation
- 15. Puis-je faire en sorte que mon applet se termine plus gracieusement?
- 16. JVM se termine lors du lancement d'Eclipse MAT sous Mac OS avec J2SE 6.0
- 17. Définition de la couleur lors du dessin dans un NSImage
- 18. Comment empêcher Visual Studio de lancer WcfSvcHost.exe lors du débogage?
- 19. Sortie NSThread lorsque l'application se termine
- 20. Le script PHP se termine prématurément
- 21. en utilisant spawnl et en attendant que le processus fils se termine
- 22. La macro EnvironmentEvent ne se termine pas
- 23. flux se termine sans boucle et imprime caractère supplémentaire
- 24. Comment puis-je faire une fonction attendre jusqu'à ce qu'une animation se termine?
- 25. Comment faire pour récupérer une erreur lors du lancement de sqlcmd à partir de C#?
- 26. Taille du panneau de dessin
- 27. Debugginng un démon qui se termine de façon inattendue
- 28. Déplacer les coordonnées lors du dessin à contrôler
- 29. Comment empêcher CFEXECUTE de se bloquer après un PrintStackTrace?
- 30. La session de débogage se termine prématurément avec vs.net 2008IE8