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 Utas UI
- Model Threading untuk Penanganan Aktivitas
- COM Afinitas Apartemen pada Windows 64-bit
- Topik terkait
Automasi UI dan Utas UI
Karena cara Automasi 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 Otomatisasi 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 menjadi utas model Component Object Model (COM) Multithreaded Apartment (MTA) (yang menginisialisasi COM dengan memanggil CoInitializeEx dengan bendera COINIT_MULTITHREADED .)
Aman untuk melakukan panggilan Otomatisasi 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 Apartemen Berulir Tunggal (STA) dapat menyebabkan masalah seperti mencegah klien menghapus penanganan aktivitas dari utas.
COM Afinitas Apartemen 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 UI Automation marshals 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 marshaled.
Masalah yang sama dapat terjadi dengan klien Automation UI 32-bit yang memiliki elemen 64-bit.
Topik terkait
-
Konseptual
-
Sumber Daya Lainnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk