Udostępnij za pomocą


Problemy z automatyzacją wątków interfejsu użytkownika

Uwaga / Notatka

Ta dokumentacja jest przeznaczona dla deweloperów programu .NET Framework, którzy chcą używać zarządzanych klas automatyzacji interfejsu użytkownika zdefiniowanych w przestrzeni nazw System.Windows.Automation. Aby uzyskać najnowsze informacje na temat automatyzacji interfejsu użytkownika, zobacz Windows Automation API: Automatyzacja interfejsu użytkownika.

Ze względu na sposób, w jaki automatyzacja interfejsu użytkownika firmy Microsoft korzysta z komunikatów systemu Windows, konflikty mogą wystąpić, gdy aplikacja kliencka próbuje wchodzić w interakcję z własnym interfejsem użytkownika w wątku interfejsu użytkownika. Te konflikty mogą prowadzić do bardzo niskiej wydajności, a nawet spowodować, że aplikacja przestanie odpowiadać.

Jeśli aplikacja kliencka ma na celu interakcję ze wszystkimi elementami na pulpicie, w tym z własnym interfejsem użytkownika, należy wykonać wszystkie wywołania automatyzacji interfejsu użytkownika w osobnym wątku. Obejmuje to lokalizowanie elementów (na przykład przy użyciu TreeWalker metody lub FindAll metody) i używanie wzorców kontrolek.

Bezpieczne jest tworzenie wywołań automatyzacji interfejsu użytkownika w programie obsługi zdarzeń automatyzacji interfejsu użytkownika, ponieważ program obsługi zdarzeń jest zawsze wywoływany w wątku bez interfejsu użytkownika. Jednak w przypadku subskrybowania zdarzeń, które mogą pochodzić z interfejsu użytkownika aplikacji klienckiej, należy wykonać wywołanie AddAutomationEventHandler metody lub powiązanej metody w wątku innym niż wątek interfejsu użytkownika. Usuń programy obsługi zdarzeń w tym samym wątku.