À quel moment dans un processus de fermeture Windows Form font les contrôles s'invalidés?

StackOverflow https://stackoverflow.com/questions/1729152

  •  19-09-2019
  •  | 
  •  

Question

J'ai récemment mis quelques cours pour certains étudiants de premier cycle pour lesquels ils doivent utiliser une petite bibliothèque relativement simple C # leur est fournie. Le but principal de cette bibliothèque est d'afficher une forme simple qui se compose d'une grille de couleur (qu'ils peuvent manipuler), un certain nombre de boutons et une étiquette avec un texte.

La classe s'étendent fournit un certain nombre de méthodes abstraites qu'ils doivent mettre en œuvre, dont un est appelé UpdateAction et est appelé automatiquement à intervalles réguliers.

Je ne l'ai pas rencontré le problème moi-même suivant mais dans les laboratoires certains des étudiants ont rencontré une InvalidOperationException intermittente d'être jeté à l'intérieur de leur méthode UpdateAction quand ils ferment leur forme. Le message d'erreur est l'erreur je normalement attendre à voir lorsque vous essayez et de modifier l'interface utilisateur à partir d'un autre thread, mais il y a juste un guillemet '' où vous verriez normalement le nom du contrôle incriminé.
Si cela continue d'être une question que nous devrons rééditer une version fixe de la bibliothèque pour les si nous avons déjà dit que cette erreur ne sera pas un impact marquant de leur travail de quelque façon (car il semble être une faille dans notre code) .

Pour autant que je peux dire aux étudiants doivent être fermer le formulaire à un tel point que la mise à jour est en cours d'exécution et les contrôles qu'ils modifient reçoivent une disposition avant le fil de mise à jour s'arrête à-dire qu'il semble que les contrôles sont devenus nuls. La chose étrange est la façon dont elle est intermittente, certains étudiants ont jamais eu la question tandis que d'autres ont continuellement. Je ne l'ai jamais rencontré personnellement tout au long de mon développement des solutions de modèle pour les cours ou dans le développement de la bibliothèque elle-même.

Alors, ma question est à quel moment dans un cycle de vie des formes ne les commandes qu'il s'éliminés et, par conséquent, où serait-il préférable de mettre le code qui arrête le fil de mise à jour? À l'heure actuelle, ce code est dans les formes Dispose, méthode, serait-il mieux placé ailleurs?

Était-ce utile?

La solution

Comment arrêtez-vous le fil? Etes-vous sûr qu'il s'arrête avant de fermer la fenêtre? Vous devez vous assurer que vous arrêtiez en mettant un drapeau dans la boucle de fil. Vous devez alors attendre que le thread pour quitter.

Discussion

while (running)
{
    // thread stuff
}

Formulaire

thread.running = false; // or use your own Stop() method that does the same thing
thread.Join();

Si vous voulez un système réactif vous devez vous assurer le fil est capable de sortir dans un court laps de temps d'obtenir le signal d'arrêt.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top