C#Outlook插件 - 事件未触发

时间:2013-02-19 18:45:45

标签: c# outlook

我正在开发一个用于Outlook的C#插件,当项目被添加到“已删除邮件”文件夹时,该插件将起作用。粗略地说,代码看起来像这样。添加方法后,我会看到日志文件,但是当我删除项目时,其他日志事件不会被触发。我错过了什么?

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
    try
    {
    Outlook._Application olApp = new Outlook.ApplicationClass();
    Outlook._NameSpace olNS = olApp.GetNamespace("MAPI");
    Outlook.MAPIFolder deletedFolder = olNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems);
    deletedFolder.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(DeletedItems_ItemAdd);
    log("addDeletedItemEventHandler method added", LogLevel.Debug);
    }
    catch (Exception e)
    {
    log("Exception in addDeletedItemEventHandler: " + e.Message, LogLevel.Error);
    }
}


private void DeletedItems_ItemAdd(object Item)
{
    log("DeletedItems_ItemAdd - Fired", LogLevel.Debug);
}
德米特里的解决方案是正确的。对于其他想要解决这个问题的人:
我在课程级别定义了以下内容:     Outlook.Items oiDeletedFolderItems;

在OnConnection方法中,我添加/更改了:     oiDeletedFolderItems = deletedFolder.Items;     oiDeletedFolderItems.ItemAdd + = new Outlook.ItemsEvents_ItemAddEventHandler(DeletedItems_ItemAdd);

1 个答案:

答案 0 :(得分:4)

触发事件(Items)的COM对象必须处于激活状态才能触发事件。在您的情况下,编译器创建一个临时变量来保存对deletedFolder.Items的调用结果;一旦该变量被垃圾收集,事件就会停止发射。

将Items对象存储在类变量中并挂钩该对象上的事件。