C # Outlook Addin - избавление от контекстного меню - PullRequest
2 голосов
/ 08 сентября 2011

Мы настраиваем пользовательское контекстное меню, когда вы щелкаете правой кнопкой мыши по электронной почте в Outlook, например:

        private void _application_ItemContextMenuDisplay(Office.CommandBar CommandBar, Interop.Selection Selection)
        {
                var contextButton = (Office.CommandBarButton)CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, Temporary: true);
                contextButton.Visible = true;
                contextButton.Caption = "&My Context Menu";
                contextButton.Click += MyContextMenu_Click;
        }

Этот метод подписан на Application.ItemContextMenuDisplay.

Он работает нормально, за исключением того, чтоиногда наше мероприятие запускается несколько раз.Это происходит, когда вы быстро щелкаете правой кнопкой мыши по разным электронным письмам.

Тогда возникает вопрос: а когда это хорошее место для очистки моего временного пункта контекстного меню?Мне нужно отписаться о событии C # где-то.Где предназначено место для этого?(Я бы также подумал, что нам может понадобиться позвонить Marshal.ReleaseComObject)

Мы используем VSTO и шаблон проекта Outlook 2010 в Visual Studio.В общем, я не нашел много хороших примеров настройки контекстного меню.

1 Ответ

1 голос
/ 19 апреля 2012

Эта причудливость, вероятно, является причиной того, что в Outlook 2010 Microsoft все больше движется в сторону настройки контекстного меню ленты XML в пользу Outlook 2007 в стиле CommandBars.См. связанный пост SO .

Что касается очистки ресурсов, используемых CommandBars, вам необходимо присоединиться к событию Application.ContextMenuClose, чтобы освободить ресурсы и отписаться от слушателя.См. связанную статью SO по утилизации контекстных меню Outlook .

Чтобы избежать использования CommandBars.

, вы должны реорганизовать свой код, чтобы использовать более новый XML-интерфейс ленты.
...