Outlook 2016插件AttachmentSelection问题

时间:2016-01-21 07:32:42

标签: c# outlook-addin outlook-2016

我为选定的附件创建了一个Outlook插件,以获取附件的详细信息。它在Outlook 2010中运行良好。 但是当我为Outlook 2016构建它时,它变为空。

以下是ThisAddIn.cs中的代码: -

 private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            System.Reflection.Assembly assemblyInfo = System.Reflection.Assembly.GetExecutingAssembly();
            Uri uriCodeBase = new Uri(assemblyInfo.CodeBase);
            string Location = Path.GetDirectoryName(uriCodeBase.LocalPath.ToString());
            var path = Location.Split(new string[] { "bin" }, StringSplitOptions.RemoveEmptyEntries);
            var rootDir = path[0].ToString();
            var forPermissionsRootDirectory = Path.GetDirectoryName(rootDir);
            SetPermissions(forPermissionsRootDirectory);

            app = this.Application;
            app.AttachmentContextMenuDisplay += new Outlook.ApplicationEvents_11_AttachmentContextMenuDisplayEventHandler(app_AttachmentContextMenuDisplay);//attach Attachment context Menu Event//

        }

 void app_AttachmentContextMenuDisplay(Office.CommandBar CommandBar, Outlook.AttachmentSelection selection)
        {
            selectedAttachment = selection;
            RibbonUI.InvalidateControlMso("ContextMenuAttachments");//will get XML file data//

        }

这是AttachmentContextMenu.cs中的代码: -

public void OnOpenMyMotionCalendarButtonClick(Office.IRibbonControl control)
        {
            Outlook.AttachmentSelection selection = ThisAddIn.selectedAttachment;
             if ((selection.Count > 0))
                {
                   //My further working
                }
         }

在选择中,Outlook 2016始终为null。 请建议做什么?

亲切的问候, 爱丽儿

1 个答案:

答案 0 :(得分:0)

我相信Outlook开发人员添加了一个额外的逻辑来释放作为参数对象(附件)的传递。因此,您需要在事件处理程序中收集所有必需的信息,因为只要方法结​​束,就可以销毁对象。事件处理程序被触发后,没有人能保证对象是活动的。您是否在AttachmentContextMenuDisplay事件处理程序中获得了有效对象?

当不再需要Outlook对象时,所有Outlook加载项都应系统地释放对Outlook对象的引用。完成使用后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook对象。然后在Visual Basic中将变量设置为Nothing(C#中为null)以释放对该对象的引用。请在Systematically Releasing Objects文章中详细了解相关内容。