Надстройка Visual Studio: принудительное недействительное действие - PullRequest
0 голосов
/ 08 апреля 2011

Я пишу надстройку панели инструментов Visual Studio, которая отображает текущее время.

У меня есть CommandBar toolbar с CommandBarButton timeLabel (потому что нет доступной метки) и Timer.
Каждый раз, когда происходит событие таймера, я устанавливаю заголовок на текущее время.

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 Ответ

1 голос
/ 26 мая 2011

Я нашел ответ для VS 2010, но, к сожалению, он не работает для VS 08.
Он обновляет весь пользовательский интерфейс:

// 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 строки кода, но это может помочь в случае, если кто-то столкнется с другой проблемой, как я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...