다음을 통해 공유


UI 자동화 스레딩 문제

참고참고

이 문서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI Automation 클래스를 사용하려는 .NET Framework 개발자를 위해 작성되었습니다.UI Automation에 대한 최신 정보는 Windows Automation API: UI Automation을 참조하십시오.

Microsoft UI Automation이 Windows 메시지를 사용하는 방식으로 인해, 클라이언트 응용 프로그램이 UI 스레드에서 자체 UI와 상호 작용을 시도할 때 충돌이 발생할 수 있습니다. 이러한 충돌로 인해 성능이 매우 느려지거나 응용 프로그램이 응답을 멈출 수 있습니다.

클라이언트 응용 프로그램이 자체 UI를 포함하여 데스크톱의 모든 요소와 상호 작용해야 하는 경우 모든 UI Automation 호출을 별도의 스레드에서 수행해야 합니다. 여기에는 TreeWalker 또는 FindAll 메서드를 사용하는 등의 방법을 통한 요소 찾기와 컨트롤 패턴의 사용이 포함됩니다.

이벤트 처리기는 항상 비 UI 스레드에서 호출되기 때문에 UI Automation 내에서 UI Automation 호출을 수행하는 것이 안전합니다. 하지만 클라이언트 응용 프로그램의 UI에서 발생할 수 있는 이벤트에 등록할 때는 AddAutomationEventHandler를 호출하거나 관련 메서드를 비 UI 스레드에서 호출해야 합니다. 같은 스레드에서 이벤트 처리기를 제거합니다.