Communication transversale avec les threads STA et les pompes de message
Ce guide explique comment envoyer des messages en toute sécurité à la pompe de message d'un thread d'appartement (STA) unique (STA) des autres threads de votre application. Ceci est particulièrement pertinent lorsque vous travaillez avec des objets com qui nécessitent un thread STA.
Création et gestion d'un thread STA avec un objet COM:
Nous pouvons créer un thread STA avec une pompe de message pour héberger un objet COM comme ceci:
<code class="language-csharp">private MyComObj _myComObj; // Called from the main thread: Thread staThread = new Thread(() => { _myComObj = new MyComObj(); _myComObj.SomethingHappenedEvent += OnSomethingHappened; Application.Run(); //Starts the message pump }); staThread.SetApartmentState(ApartmentState.STA); staThread.Start();</code>
Messagerie croisée sûre à l'aide d'une classe de base personnalisée:
Pour assurer la sécurité du thread lors de l'envoi de messages au thread STA, nous pouvons utiliser une classe de base personnalisée:
<code class="language-csharp">class STAThread : IDisposable { [...Implementation Here...] }</code>
Cette classe gère une file d'attente de messages en filetage. Des méthodes comme BeginInvoke
ou Invoke
vous permettent d'exécuter du code sur le thread STA. La méthode Dispose()
arrête en toute sécurité le fil, bien qu'il soit crucial de s'assurer que tous les objets com sont correctement libérés avant l'élimination pour éviter les problèmes.
Conclusion:
En utilisant cette approche avec une classe de base personnalisée STAThread
, vous pouvez communiquer de manière fiable avec la pompe de message de thread STA à partir d'autres threads, permettant une coordination inter-thread efficace dans votre application. N'oubliez pas que l'élimination appropriée des STAThread
et de ses objets COM associés est essentiel pour la stabilité de l'application.
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!