Bagikan melalui


Memahami Masalah Utas

Topik ini menjelaskan skenario utas umum untuk implementasi klien Microsoft UI Automation dan menjelaskan cara menghindari masalah yang dapat terjadi jika klien salah menggunakan utas.

Topik ini berisi bagian berikut:

Automasi UI dan UI Thread

Karena cara Automation UI menggunakan pesan Windows, konflik dapat terjadi ketika aplikasi klien mencoba berinteraksi dengan UI-nya sendiri pada utas UI. Konflik ini dapat menyebabkan performa yang sangat lambat, atau bahkan menyebabkan aplikasi berhenti merespons.

Jika aplikasi klien Anda dimaksudkan untuk berinteraksi dengan semua elemen di desktop, termasuk UI-nya sendiri, Anda harus melakukan semua panggilan Automation UI dari utas terpisah. Ini termasuk menemukan elemen, misalnya, dengan menggunakan IUIAutomationTreeWalker atau metode IUIAutomationElement::FindAll dan menggunakan pola kontrol. Utas ini tidak boleh memiliki jendela apa pun, dan harus merupakan utas model Component Object Model (COM) Multithreaded Apartment (MTA) (yang menginisialisasi COM dengan memanggil CoInitializeEx dengan bendera COINIT_MULTITHREADED .)

Aman untuk melakukan panggilan Automation UI di penanganan aktivitas Automation UI, karena penanganan aktivitas selalu dipanggil pada utas non-UI. Namun, ketika berlangganan peristiwa yang mungkin berasal dari UI aplikasi klien Anda, Anda harus melakukan panggilan ke IUIAutomation::AddAutomationEventHandler, atau metode terkait, pada utas non-UI (yang juga harus menjadi utas MTA). Hapus penanganan aktivitas pada alur yang sama.

Klien Automation UI tidak boleh menggunakan beberapa utas untuk menambahkan atau menghapus penanganan aktivitas. Perilaku tak terduga dapat mengakibatkan satu penanganan aktivitas ditambahkan atau dihapus saat yang lain sedang ditambahkan atau dihapus dalam proses klien yang sama.

Model Threading untuk Penanganan Aktivitas

Klien Automation UI harus menggunakan model utas COM MTA untuk utas yang mengimplementasikan penanganan aktivitas. Menggunakan model Single-threaded Apartment (STA) dapat menyebabkan masalah seperti mencegah klien menghapus penanganan aktivitas dari utas.

COM Apartment Affinity pada Windows 64-bit

Menurut spesifikasi COM, masa pakai objek jarak jauh diatur oleh masa pakai apartemen tempat fungsi CoCreateInstance dipanggil untuk membuat objek. Ketika apartemen asli dimatikan, objek jarak jauh juga dilepaskan.

Untuk klien Automation UI, perilaku COM ini dapat berarti bahwa masa pakai pembantu 32/64 jarak jauh (dibuat oleh UIAutomationCore.dll) yang digunakan oleh elemen 32-bit diatur oleh masa pakai apartemen utas yang menciptakan elemen . Jika klien Automation UI melakukan marshal elemen ke utas lain, elemen dapat menjadi tidak valid ketika apartemen asal dimatikan. Klien Automation UI harus menangani masalah ini dengan anggun dengan menangkap kesalahan saat menggunakan elemen otomatisasi marshal.

Masalah yang sama dapat terjadi dengan klien Automation UI 32-bit yang memiliki elemen 64-bit.

Konseptual:

Mendapatkan Elemen UI Automation

Berlangganan Peristiwa Automasi UI

Ringkasan Peristiwa UI Automation

Sumber Daya Lainnya:

Deskripsi dan Pekerjaan Model Utas OLE