我正在编写一个显示当前时间的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()
吗?我觉得这个解决方案真的很不舒服。
谢谢&亲切的问候 西蒙
答案 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行代码更容易理解,但如果有人遇到像我这样的问题,这可能会有所帮助。