Kullanıcı Arabirimini Güncelleştirme

Bir komut uyguladıktan sonra, kullanıcı arabirimini yeni komutlarınızın durumuyla güncelleştirmek için kod ekleyebilirsiniz.

Tipik bir Win32 uygulamasında komut kümesi sürekli yoklanabilir ve kullanıcı bunları görüntüledikçe tek tek komutların durumu ayarlanabilir. Bununla birlikte, Visual Studio kabuğu sınırsız sayıda VSPackage barındırabildiğinden, kapsamlı yoklama, özellikle yönetilen kod ile COM arasındaki birlikte çalışma derlemeleri arasında yoklama olmak üzere yanıt hızını azaltabilir.

Kullanıcı arabirimini güncelleştirmek için

  1. Aşağıdaki adımlardan birini uygulayın:

    • yöntemini çağırın UpdateCommandUI .

      Hizmetten SVsUIShell aşağıdaki gibi bir IVsUIShell arabirim elde edilebilir.

      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);
          }
      }
      
      

      parametresi UpdateCommandUI sıfır değil ()TRUE ise, güncelleştirme zaman uyumlu ve hemen gerçekleştirilir. İyi bir performans sağlamaya yardımcı olması için bu parametre için sıfır (FALSE) geçirmenizi öneririz. Önbelleğe almayı önlemek istiyorsanız, .vsct dosyasında komutu oluştururken bayrağını uygulayın DontCache . Bununla birlikte, bayrağını dikkatli bir şekilde kullanın; aksi zaman performans düşebilir. Komut bayrakları hakkında daha fazla bilgi için Komut Bayrağı Öğesi belgelerine bakın.

    • Bir penceredeki yerinde etkinleştirme modelini kullanarak bir ActiveX denetimini barındıran VSPackage'larda yöntemini kullanmak UpdateUI daha kullanışlı olabilir. UpdateCommandUI Arabirimindeki IVsUIShell yöntemi ve UpdateUI arabirimdeki IOleInPlaceComponentUIManager yöntemi işlevsel olarak eşdeğerdir. Her ikisi de ortamın tüm komutların durumunu yeniden sorgulamasına neden olur. Genellikle, bir güncelleştirme hemen gerçekleştirilmez. Bunun yerine, güncelleştirme boşta kalma süresine kadar geciktirilir. Kabuk, iyi performans sağlamaya yardımcı olmak için komut durumunu önbelleğe alır. Önbelleğe almayı önlemek istiyorsanız, .vsct dosyasında komutu oluştururken bayrağını uygulayın DontCache . Bununla birlikte, performans düşebileceğinden bayrağını dikkatli bir şekilde kullanın.

      Bir nesnede IOleInPlaceComponentUIManagerIOleComponentUIManager yöntemini çağırarak QueryInterface veya arabirimi hizmetten alarak arabirimini edinebileceğinize SOleComponentUIManager dikkat edin.