C#Outlook插件事件没有触发

问题描述:

我正在研究一个Outlook的C#插件,当一个项目被添加到已删除邮件文件夹时,这个插件会动作。粗略地说,代码看起来像这样。我在添加方法时看到日志发布,但是当我删除一个项目时,另一个日志事件不会被触发。我错过了什么?C#Outlook插件事件没有触发

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);

+0

你调试了你的代码,以确定哪一行不工作? – 2013-02-19 19:08:48

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

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

+0

谢谢你,德米特里。你是对的! – Murali 2013-02-20 16:44:51