Le problème se produit :
Lorsque WinForm gère l'accès multithread aux contrôles du thread principal, ce qui suit apparaît : Boîte de dialogue d'erreur affichée :
Solution :
Solution 1 : Supprimez le contrôle de sécurité pour l'accès des threads aux contrôles de l'interface utilisateur du thread principal, utilisez :
Control.CheckForIllegalCrossThreadCalls = false;
Option 2 : utiliser la délégation pour pousser l'opération de contrôle de l'interface utilisateur du fil de discussion principal vers la file d'attente des messages du fil de discussion. les méthodes sont : la méthode Invoke et la méthode BeginInvoke. La première est une méthode synchrone et la seconde est une méthode asynchrone
Le code du programme utilisant la méthode d'invocation synchrone est le suivant, qui a réussi le test : 🎜>
Remarque : Le processus d'utilisation de la méthode asynchrone BeginInvoke est le même que la méthode d'invocation synchrone. Remplacez simplement la méthode Invoke par la méthode BeginInvoke ;
Option 3 : Utiliser ; contexte de synchronisation : méthode SynchronizationContext , cette méthode consiste à obtenir les informations contextuelles du thread principal, puis à pousser la méthode de contrôle d'accès de l'interface utilisateur vers la file d'attente de messages du contexte de l'interface utilisateur dans le thread enfant, en utilisant POST ou Send ; Option 4 : Il existe une classe
BackgroundWorker dans l'espace de noms: System.ComponentModel. Elle est exécutée dans un thread séparé. La figure suivante est copiée de la description officielle du site :
. Extension de question : Pourquoi ajouter un contrôle TextBox sur winform puis accéder au contrôle du thread principal de l'interface utilisateur via un autre thread sans signaler d'erreur et passer normalement ? ? ? S'il vous plaît, donnez-moi quelques conseils d'experts ! ! !La photo est la suivante :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!