2011-07-29 3 views
1

J'utilise background worker pour effectuer un long processus sur certains fichiers. Je prends l'adresse d'un répertoire de textBox1 et l'adresse d'un fichier qui est utilisé pour la fonction de traitement de textBox2. J'ai aussi un ComboBox. Sur la base de la valeur sélectionnée de la ComboBox, le programme choisit une fonction différente à l'aide d'un simple commutateur.Lire textBox.Text dans BackGroundWorker

Maintenant, le problème est que je ne peux pas accéder aux valeurs de ces zones de texte et de la zone de liste déroulante dans BackGroundWorker_DoWork. Bien sûr, j'obtiens l'exception d'accéder à un contrôle depuis un thread sur lequel il n'a pas été créé. J'ai beaucoup cherché sur les délégués et tout ça. Les exemples que j'ai vus jusqu'ici concernent tous l'affectation d'un texte à la zone de texte dans le programme. Alors que ce que je veux faire est de lire le texte que l'utilisateur a inséré dans le textBox. Puisque je ne suis pas familier avec le concept de délégués, je veux savoir comment je peux lire et utiliser les Textes de textBoxes et le ComboBox et les traiter dans le BackGroundWorker?

Désolé, je ne peux pas poster le code ici en raison de politiques de sécurité.

/MoNoo

Répondre

1

Vous ne dites pas si cela est WinForms, WPF ou Silverlight, mais WPF vous le ferait en utilisant la propriété Dispatcher de la combobox, quelque chose comme ceci:

string theText; 

    myComboBox.Dispatcher.Invoke(DispatcherPriority.Normal, 
      new Action(delegate() 
      { 
       theText = myComboBox.Text; 
      } 
     )); 

Cela va rassembler l'appel sur le fil principal et revenir.