Atualizando a interface do usuário
Depois de implementar um comando, você pode adicionar código para atualizar a interface do usuário com o estado dos novos comandos.
Em um aplicativo Win32 típico, o conjunto de comandos pode ser continuamente sondado e o estado de comandos individuais pode ser ajustado à medida que o usuário os visualiza. No entanto, como o shell do Visual Studio pode hospedar um número ilimitado de VSPackages, a sondagem extensiva pode diminuir a capacidade de resposta, especialmente a sondagem entre assemblies de interoperabilidade entre código gerenciado e COM.
Para atualizar a interface do usuário
Execute uma das seguintes etapas:
Chame o método UpdateCommandUI .
Uma IVsUIShell interface pode ser obtida a SVsUIShell partir do serviço, como segue.
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); } }
Se o parâmetro do for diferente de zero (
TRUE
), a atualização será executada UpdateCommandUI de forma síncrona e imediata. Recomendamos que você passe zero (FALSE
) para esse parâmetro para ajudar a manter o bom desempenho. Se você quiser evitar o armazenamento em cache, aplique oDontCache
sinalizador ao criar o comando no arquivo .vsct. No entanto, use o sinalizador com cautela ou o desempenho pode diminuir. Para obter mais informações sobre sinalizadores de comando, consulte a documentação do elemento Command Flag .Em VSPackages que hospedam um controle ActiveX usando o modelo de ativação in-loco em uma janela, pode ser mais conveniente usar o UpdateUI método. O UpdateCommandUI método na interface e o UpdateUI método na IVsUIShell IOleInPlaceComponentUIManager interface são funcionalmente equivalentes. Ambos fazem com que o ambiente consulte novamente o estado de todos os comandos. Normalmente, uma atualização não é executada imediatamente. Em vez disso, uma atualização é adiada até o tempo ocioso. O shell armazena em cache o estado do comando para ajudar a manter o bom desempenho. Se você quiser evitar o armazenamento em cache, aplique o
DontCache
sinalizador ao criar o comando no arquivo .vsct. No entanto, use o sinalizador com cautela porque o desempenho pode diminuir.Observe que você pode obter a interface chamando o
QueryInterface
método em um IOleComponentUIManager objeto ou obtendo a IOleInPlaceComponentUIManager interface do SOleComponentUIManager serviço.