Aktualizace uživatelského rozhraní
Po implementaci příkazu můžete přidat kód pro aktualizaci uživatelského rozhraní se stavem nových příkazů.
V typické aplikaci Win32 je možné sadu příkazů průběžně dotazovat a stav jednotlivých příkazů je možné upravit podle toho, jak je uživatel zobrazuje. Vzhledem k tomu, že prostředí sady Visual Studio může hostovat neomezený počet balíčků VSPackage, může rozsáhlé dotazování snížit rychlost odezvy, zejména dotazování napříč sestaveními spolupráce mezi spravovaným kódem a objektem COM.
Aktualizace uživatelského rozhraní
Proveďte jeden z následujících kroků:
Zavolejte metodu UpdateCommandUI .
Rozhraní IVsUIShell lze ze SVsUIShell služby získat následujícím způsobem.
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); } }
Pokud je parametr UpdateCommandUI nenulové (
TRUE
), provede se aktualizace synchronně a okamžitě. Doporučujeme, abyste pro tento parametr předali nulu (FALSE
), aby se zachoval dobrý výkon. Pokud se chcete vyhnout ukládání do mezipaměti, použijteDontCache
příznak při vytváření příkazu v souboru .vsct. Příznak však může opatrně nebo výkon snížit. Další informace o příznakech příkazů naleznete v dokumentaci k elementu Command Flag.V balíčku VSPackage, které hostují ovládací prvek technologie ActiveX pomocí místního aktivačního modelu v okně, může být vhodnější použít metoduUpdateUI. Metoda UpdateCommandUI v IVsUIShell rozhraní a UpdateUI metoda v IOleInPlaceComponentUIManager rozhraní jsou funkčně ekvivalentní. Obě způsobují, že se prostředí znovu dotazuje na stav všech příkazů. Aktualizace se obvykle neprovádí okamžitě. Místo toho se aktualizace zpozdí do doby nečinnosti. Prostředí ukládá stav příkazu do mezipaměti, aby se zachoval dobrý výkon. Pokud se chcete vyhnout ukládání do mezipaměti, použijte
DontCache
příznak při vytváření příkazu v souboru .vsct. Příznak však používejte opatrně, protože výkon může snížit.Všimněte si, že rozhraní můžete získat IOleInPlaceComponentUIManager voláním
QueryInterface
metody na objektu IOleComponentUIManager nebo získáním rozhraní ze SOleComponentUIManager služby.