Comment vous mettez à jour les textes de texte et les étiquettes dans le thread principal à partir d'un nouveau thread en exécutant une classe différente.
mainform.cs (fil principal) p> J'ai regardé Aux exemples ici mais je ne peux pas sembler le faire correctement. S'il vous plaît que quelqu'un pourrait donner de bons liens. P> J'ai recommencé de nouveau, donc je ne gâche pas mon code. Si quelqu'un aimerait mettre en place un exemple de travail avec mon exemple, ce serait génial. p> aussi Si je devais mettre à jour plusieurs objets tels que textesboxes et étiquettes, etc., quelle serait la meilleure façon d'y aller, avoir une méthode pour chaque zone de texte ou y a-t-il un moyen Pour ce faire avec une méthode? P> P>
3 Réponses :
Vous pouvez appeler le begininvoke Code> Méthode
, qui mettra en ligne une déléguée à exécuter de manière asynchrone sur le fil de l'interface utilisateur. P>
Si vous avez besoin du fil d'arrière-plan pour attendre que la fonction se termine sur le thread d'interface utilisateur, vous pouvez appeler invoquer code>
à la place. p>
Notez que vous aurez besoin d'une référence à l'instance de votre formulaire; Vous devriez probablement passer cela au constructeur code> code> et stockez-le dans un champ privé. P>
Le Backworker composant fera tout cela en utilisant automatiquement la méthode code> ReportProgress code>; Vous devriez envisager d'utiliser. P>
Merci pour la réponse, mais je suis nouveau à C # et aurait besoin d'un exemple pour travailler afin que je puisse comprendre comment cela fonctionne.
@tiptop: Vous devriez probablement utiliser un travailleur d'arrière-plan. MSDN a des exemples .
Tout développeur Winforms devrait comprendre comment mettre à jour l'interface utilisateur d'une manière threadsafe, et les deux approches sont des options valides pour comprendre
... aussi mérite aussi d'avertir que le synchronisationContext.begininvoke () code> utilisé pour basculer sur le thread de l'interface utilisateur est différent de
délégué.begininvoke () code>, identique pour
invoke () sur chaque type code>. Si vous faites des winforms multithreads, alors cette ambiguïté peut gâcher avec vous
invoquer ou begininvoke, par exemple @tiptopjones Je suppose que vous demandez également comment obtenir une référence au formulaire. Vous pouvez faire de votre méthode Helloworld Prendre un paramètre d'objet, utilisez le délégué paramétrasedTheadStart, puis transmettez une référence au formulaire sous forme de paramètre sur la méthode thread.start. Mais je suggérerais de lire sur les méthodes anonymes qui le rend beaucoup plus facile et que tout garde fortement tapé. P> lorsque vous êtes à l'aise avec qui vous pouviez lire sur les expressions de Lambda et faire C'est comme: p>
Hé, c'est préférable de modifier votre question pour ajouter plus d'informations plutôt que de fournir une autre réponse.
La manière préférée dans Winforms est d'utiliser la synchronisationContext
Bienvenue à cela. Vous pouvez modifier votre question pour ajouter des informations supplémentaires et vous pouvez laisser des commentaires sur les réponses à une question que vous avez posée (et sur quoi que ce soit après avoir frappé 50 représentants).