C#Outlook Addin - 上下文菜单处理

时间:2011-09-07 20:53:57

标签: c# .net vsto outlook-addin

我们在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

我们在Visual Studio中使用VSTO和Outlook 2010项目模板。一般来说,我没有找到许多自定义上下文菜单的好例子。

1 个答案:

答案 0 :(得分:1)

这种怪癖可能就是为什么在Outlook 2010中,微软正朝着Ribbon XML context menu customizations转向{2007}风格的CommandBars。见related SO post

至于清理CommandBars使用的资源,您需要附加到Application.ContextMenuClose事件以释放资源并取消订阅您的监听器。见related SO post on disposing Outlook Context Menus

您应该重构代码以利用较新的Ribbon XML接口来避免CommandBars