Problemy wielowątkowości dotyczące automatyzacji interfejsu użytkownika

Uwaga

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

Ze względu na sposób, w jaki firma Microsoft automatyzacja interfejsu użytkownika używa 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 automatyzacja 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 wykonanie wywołań automatyzacja interfejsu użytkownika w programie obsługi zdarzeń automatyzacja 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 AddAutomationEventHandlermetody lub powiązanej metody w wątku innym niż interfejs użytkownika. Usuń programy obsługi zdarzeń w tym samym wątku.