Outlook 2007加载项 - 使用BeforeItemMove事件的问题

时间:2009-05-04 19:09:34

标签: outlook vsto add-in outlook-2007 outlook-addin

我正在编写Outlook 2007插件。我所做的只是:

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Outlook.Folder root;

        //creates Spam folder if it dosen't exist
        if (!SpamFolderExist())
        {
            CreateSpamFolder();
        }

        root = (Outlook.Folder)this.Application.Session.DefaultStore.GetRootFolder();

        //set BeforeItemMove event for spam and inbox folders
        spamFolder = (Outlook.Folder)root.Folders["Spam"];
        inboxFolder = (Outlook.Folder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

        spamFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromSpam);
        inboxFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromInbox);

        //set new mail event
        this.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(OnNewMail);
    }

问题是,即使我在BeforeItemMoveFromInbox和BeforeItemMoveFromSpam方法中没有写任何内容,该应用程序也有一个奇怪的行为。在我移动一些邮件之后,它不再对特定邮件执行任何移动操作。似乎邮件被阻止了,我无法移动它。执行其他移动操作后,其他邮件将被阻止,并且可以移动之前被阻止的邮件。这个想法是,在邮件被阻止后,它将始终至少有一个无法移动的邮件。换句话说,一些移动动作随机失败。我不得不说除了将邮件从文件夹移动到另一个文件夹之外我没有做任何其他事情而且我没有收到任何错误消息。我还尝试在方法结束时将BeforeItemMove事件处理程序的cancel参数设置为false但我得到了相同的行为。

2 个答案:

答案 0 :(得分:1)

你得到了76mel。我有同样的问题(只是将一个文件夹连接到BeforeItemMove事件,使得当我从该文件夹中移出一条消息时,我无法将它从新文件夹移动到另一个文件夹中一小段时间) 。

将Marshal.ReleaseComObject()添加到事件处理程序的末尾,完美地修复了它。

答案 1 :(得分:0)

如果我理解上面的问题描述,

如果您将项目从收件箱移动到垃圾邮件文件夹,则会触发该事件,但如果您将相同的项目移回,则该项目无效。 ??因为您必须为将要移动的alls文件夹挂钩事件。

可能发生的事情是您可能必须在事件处理程序中释放Object Marshal.ReleaseComObject()