J'ai toujours eu beaucoup de problèmes avec BackgroundWorkers en C# pour une raison quelconque; leur concept semble vraiment me bloquer, donc j'espère que c'est un problème assez basique et que quelque chose peut être corrigé assez facilement ...C# - BackgroundWorker Mise à jour constante du contrôle: Erreur!
J'ai deux formes qui utilisent .NET remoting pour communiquer d'avant en arrière. En ce moment, modifier un paramètre sur Form1 provoque quelque chose à changer sur Form2 et cela fonctionne très bien. Cependant, maintenant je dois faire fonctionner la même chose dans l'autre sens (changer quelque chose sur Form2 provoque la mise à jour de Form1) et je ne peux pas le faire de la même façon (je ne peux pas à Form1). En ce moment, j'essaie d'utiliser un BackgroundWorker sur Form1 pour appeler constamment une méthode 'Update()' sur chacun des sous-contrôles (qui sont placés sur Form1). Chacun de ces contrôles a le moyen de saisir l'état actuel de leurs paramètres équivalents à partir de Form2 et de se mettre à jour (cela fonctionne bien, la méthode 'Update()' est déjà considérée comme travaillant sur l'initialisation de Form1).
Voici où mon problème se pose. Je ne savais pas comment faire en sorte que BackgroundWorker appelle constamment 'Update()' sur chacun des formulaires, donc dans ma méthode 'DoWork()', j'ai une boucle "while (true)" et dans lequel BackgroundWorker appelle la 'Update() 'méthode de chaque sous-contrôle, puis dort pendant une très courte période, puis répète. En procédant de cette façon, j'obtiens une erreur "InvalidOperationException was non gérée par le code utilisateur" avec des détails indiquant que "l'opération cross-thread n'est pas valide: Control 'comboBox_BGColor' accédé à partir d'un thread autre que le thread sur lequel il a été créé. " Maintenant, je sais essentiellement ce que cela signifie et je comprends pourquoi c'est arrivé, cependant, je ne sais pas quoi faire différemment ou comment changer les choses pour le faire fonctionner comme vous le souhaitez. Quelqu'un at-il des conseils sur ceci ou la façon dont j'utilise BackgroundWorker? Merci beaucoup pour toute information et pour avoir pris le temps de lire ceci!