사용자 인터페이스 업데이트
명령을 구현한 후 코드를 추가하여 새 명령의 상태로 사용자 인터페이스를 업데이트할 수 있습니다.
일반적인 Win32 애플리케이션에서는 명령 집합을 지속적으로 폴링할 수 있으며 사용자가 볼 때 개별 명령의 상태를 조정할 수 있습니다. 그러나 Visual Studio 셸은 VSPackage를 무제한으로 호스팅할 수 있으므로 광범위한 폴링, 특히 관리 코드와 COM 간의 interop 어셈블리 전반에 걸친 폴링은 응답성을 감소시킬 수 있습니다.
UI를 업데이트하려면
다음 단계 중 하나를 수행합니다.
UpdateCommandUI 메서드를 호출합니다.
IVsUIShell 인터페이스는 다음과 같이 SVsUIShell 서비스에서 가져올 수 있습니다.
void UpdateUI(Microsoft.VisualStudio.Shell.ServiceProvider sp) { IVsUIShell vsShell = (IVsUIShell)sp.GetService(typeof(IVsUIShell)); if (vsShell != null) { int hr = vsShell.UpdateCommandUI(0); Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr); } }
UpdateCommandUI의 매개 변수가 0이 아닌 경우(
TRUE
) 업데이트가 동기적으로 즉시 수행됩니다. 좋은 성능을 유지하는 데 도움이 되도록 이 매개 변수에 0(FALSE
)을 전달하는 것이 좋습니다. 캐싱을 방지하려면 .vsct 파일에서 명령을 만들 때DontCache
플래그를 적용합니다. 그러나 플래그를 주의해서 사용하지 않으면 성능이 저하될 수 있습니다. 명령 플래그에 대한 자세한 내용은 Command Flag 요소 설명서를 참조하세요.창에서 내부 활성화 모델을 사용하여 ActiveX 컨트롤을 호스트하는 VSPackages에서는 UpdateUI 메서드를 사용하는 것이 더 편리할 수 있습니다. IVsUIShell 인터페이스의 UpdateCommandUI 메서드와 IOleInPlaceComponentUIManager 인터페이스의 UpdateUI 메서드는 기능적으로 동일합니다. 두 메서드 모두 환경에서 모든 명령의 상태를 다시 쿼리하게 합니다. 일반적으로 업데이트는 즉시 수행되지 않습니다. 대신 유휴 시간까지 업데이트가 지연됩니다. 셸은 좋은 성능을 유지하는 데 도움이 되도록 명령 상태를 캐시합니다. 캐싱을 방지하려면 .vsct 파일에서 명령을 만들 때
DontCache
플래그를 적용합니다. 그러나 성능이 저하될 수 있으므로 플래그를 주의해서 사용합니다.IOleComponentUIManager 개체에서
QueryInterface
메서드를 호출하거나 SOleComponentUIManager 서비스에서 인터페이스를 가져와서 IOleInPlaceComponentUIManager 인터페이스를 가져올 수 있습니다.