我正在开发一个用于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);
}
德米特里的解决方案是正确的。对于其他想要解决这个问题的人:在OnConnection方法中,我添加/更改了: oiDeletedFolderItems = deletedFolder.Items; oiDeletedFolderItems.ItemAdd + = new Outlook.ItemsEvents_ItemAddEventHandler(DeletedItems_ItemAdd);
答案 0 :(得分:4)
触发事件(Items)的COM对象必须处于激活状态才能触发事件。在您的情况下,编译器创建一个临时变量来保存对deletedFolder.Items的调用结果;一旦该变量被垃圾收集,事件就会停止发射。
将Items对象存储在类变量中并挂钩该对象上的事件。