다음을 통해 공유


UI 자동화 스레딩 문제

참고 항목

이 설명서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI 자동화 클래스를 사용하려는 .NET Framework 개발자를 위한 것입니다. UI 자동화에 대한 최신 정보는 Windows 자동화 API: UI 자동화를 참조하세요.

Microsoft UI 자동화가 Windows 메시지를 사용하는 방식 때문에 클라이언트 애플리케이션이 UI 스레드에서 자체 UI와 상호 작용하려고 할 때 충돌이 발생할 수 있습니다. 이러한 충돌로 인해 성능이 매우 저하되거나 애플리케이션의 응답이 중지될 수 있습니다.

클라이언트 애플리케이션이 자체 UI를 포함하여 데스크톱의 모든 요소와 상호 작용하려는 경우 별도의 스레드에서 모든 UI 자동화를 호출해야 합니다. 여기에는 요소 찾기(예: TreeWalker 또는 FindAll 메서드를 사용하여 찾기)와 컨트롤 패턴 사용이 포함됩니다.

이벤트 처리기는 항상 UI가 아닌 스레드에서 호출되기 때문에 UI 자동화 이벤트 처리기 내에서 UI 자동화를 호출하는 것이 안전합니다. 하지만 클라이언트 애플리케이션의 UI에서 발생할 수 있는 이벤트를 구독할 때는 AddAutomationEventHandler 또는 관련 메서드를 비 UI 스레드에서 호출해야 합니다. 동일한 스레드에서 이벤트 처리기를 제거합니다.