C#Outlook加载项-上下文菜单处理

C#Outlook加载项-上下文菜单处理,c#,.net,vsto,outlook-addin,C#,.net,Vsto,Outlook Addin,当您在Outlook中右键单击电子邮件时,我们会设置一个自定义上下文菜单,如下所示: private void _application_ItemContextMenuDisplay(Office.CommandBar CommandBar, Interop.Selection Selection) { var contextButton = (Office.CommandBarButton)CommandBar.Controls.

当您在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;
        }
此方法已订阅到
应用程序。ItemContextMenuDisplay

它工作正常,只是偶尔我们的事件会被多次触发。当你右键快速点击不同的电子邮件时,就会发生这种情况

然后我想知道,什么时候是清理临时上下文菜单项的好地方?我需要退订某个地方的C#活动。打算在哪里做这件事?(我还认为我们可能需要调用
Marshal.ReleaseComObject


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

这可能就是为什么在Outlook 2010中,Microsoft更倾向于使用Outlook 2007样式的命令栏。看

至于清理
命令栏使用的资源,您需要附加到事件以释放资源并取消订阅侦听器。看


您应该重构代码,以利用较新的Ribbon XML界面来避免
命令栏

我们发现此事件没有按预期触发(我认为是因为它是列表中联系人或电子邮件上的菜单)。我不再处理这个问题了——我们最终清理了
ItemContextMenuDisplay
开头的旧菜单。这对我们很有效。