komunikasi silang-thread dengan benang STA dan pam mesej
Panduan ini menerangkan cara menghantar mesej dengan selamat ke pam mesej dari thread pangsapuri tunggal (STA) dari benang lain dalam permohonan anda. Ini amat relevan apabila bekerja dengan objek COM yang memerlukan benang STA.Membuat dan menguruskan benang STA dengan objek com:
kita boleh membuat thread STA dengan pam mesej untuk menjadi tuan rumah objek com seperti ini:
<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>
pemesejan silang-thread selamat menggunakan kelas asas tersuai:
Untuk memastikan keselamatan benang apabila menghantar mesej ke thread STA, kita boleh menggunakan kelas asas tersuai:
<code class="language-csharp">class STAThread : IDisposable { [...Implementation Here...] }</code>
atau BeginInvoke
membolehkan anda melaksanakan kod pada thread STA. Kaedah Invoke
dengan selamat menutup benang, walaupun sangat penting untuk memastikan semua objek COM dilepaskan dengan betul sebelum pelupusan untuk mengelakkan isu. Dispose()
Kesimpulan:
Dengan menggunakan pendekatan ini dengan kelas asas, anda boleh berkomunikasi dengan pam mesej STA Thread dari thread lain, membolehkan koordinasi inter-thread yang cekap dalam aplikasi anda. Ingatlah bahawa pelupusan yang betul STAThread
dan objek COM yang berkaitan adalah kritikal untuk kestabilan aplikasi. STAThread
Atas ialah kandungan terperinci Bagaimana cara menghantar mesej dengan selamat ke pam mesej STA Thread dari benang lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!