Définir la valeur de l'étiquette avec C # Cross Threading
J'ai besoin d'aide avec réglage/changement de la valeur d'une étiquette dans mon programme C# à chaque fois que je l'ai essayer une erreur se produit en disant: j'ai besoin de traverser l'enfiler. Quelqu'un peut écrire un peu de code pour m'aider?
Mon code est:
int number = 0;
int repeats = Convert.ToInt32(textBox2.Text);
while (number < repeats)
{
repeats++;
label5.Text = "Requested" + repeats + "Times";
}
Quelqu'un peut m'aider?
Merci.
source d'informationauteur Lawrence
Vous devez vous connecter pour publier un commentaire.
Essayez ce qui suit pour mettre à jour la valeur
La méthode Invoke (à partir de
Control.Invoke
) sera la cause de la passée de délégué à être exécuté sur le fil qui leControl
possède une affinité avec. Dans ce cas, il va l'amener à exécuter sur le thread GUI de votre application et donc de faire la mise à jour de sécurité.Vous pouvez ajouter cette extension de la méthode que j'utilise régulièrement (similaire à la technique de @JaredPar réponse):
Vous pouvez ensuite utiliser sur tout le Contrôle (ou des dérivés) nativement dans votre code via:
Vous pouvez également exécuter plusieurs méthodes via la méthode anonyme de passage:
Garder à l'esprit que si votre threads tentent d'Invoquer sur un contrôle qui sont éliminés, vous aurez une ObjectExposedException. Ce qui se passe si un fil n'a pas encore abandonnée par l'application est en cours d'arrêt. Vous pouvez "manger" le ObjectDisposedException en l'entourant votre Invoke() de l'appel, ou vous pouvez "manger" l'exception dans le Invoke() la méthode d'extension.