Comment lire une zone de liste déroulante à partir d'un thread autre que le thread qu'il a été créé?
Je suis en train de lire un combobox.Du texte à partir d'un thread autre que le thread qu'il a été créé, mais j'obtiens l'erreur:
Une exception non gérée du type
'Système.InvalidOperationException'
s'est produite dans System.Windows.Forms.dllInformations supplémentaires: Cross-thread
cette opération n'est pas valide: le Contrôle
'levelsComboBox' accessible à partir d'un
thread autre que le thread qu'il a été
créé sur.
J'ai utilisé .Invoquer l'avant, mais seulement de définir des propriétés, comment puis-je utiliser pour la lecture de zone de liste déroulante.Texte? Parce que .Invoquer void et j'ai besoin d'une chaîne. Ou est-il un autre moyen de le faire sans l'Invoquer?
- Je pense que c'est un doublon de la Comment obtenir la valeur de retour lorsque BeginInvoke/Invoke est appelé en C#
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire comme ceci:
Vous pouvez toujours utiliser
Invoke
et de le lire à une variable locale.Quelque chose comme ceci:
Depuis
Invoke
est synchrone, vous avez la garantie quetext
variable contiendra la valeur de la liste déroulante zone de texte après qu'il renvoie.Voie la plus courte est:
La solution la plus simple est d'utiliser le BackgroundWorker classe de l'exécution de travaux sur un autre thread, tout en étant capable de mettre à jour l'INTERFACE utilisateur (par exemple, lors de la présentation des progrès ou lorsque la tâche est terminée).