Visual Studio加载项:强制无效

时间:2011-04-08 13:19:10

标签: visual-studio add-in

我正在编写一个显示当前时间的Visual Studio工具栏加载项。

我的CommandBar toolbar上有一个CommandBarButton timeLabel(因为没有可用的标签)和一个Timer。 每次Timer-Event命中时,我都会将标题设置为当前时间。

DateTime t = DateTime.Now;
timeLabel.Caption = String.Format("{0}:{1}:{2}", t.Hour, t.Minute, t.Second);
// force Invalidate/repaint
timeLabel.Visible = !timeLabel.Visible;
timeLabel.Visible = !timeLabel.Visible;

有更优雅的方式来Invalidate()吗?我觉得这个解决方案真的很不舒服。

谢谢&亲切的问候 西蒙

1 个答案:

答案 0 :(得分:1)

我找到了VS 2010的答案,但不幸的是,这似乎不适用于VS 08 它更新了整个UI:

// Invalidate the VS UI
ThreadHelper.Generic.Invoke(new System.Action(() =>
{
    ServiceProvider serviceProvider = new ServiceProvider(((DTE)Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(DTE))) as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
    IVsUIShell uiShell = serviceProvider.GetService(typeof(SVsUIShell)) as IVsUIShell;
    uiShell.UpdateCommandUI(0);
}));

恕我直言我的第一个解决方案比这3行代码更容易理解,但如果有人遇到像我这样的问题,这可能会有所帮助。