C#Outlook插件-事件未启动
本文关键字:启动 事件 插件 C#Outlook | 更新日期: 2023-09-27 18:00:05
我正在为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);
}
德米特里的解决方案是正确的。对于其他希望解决此问题的人:
我在课堂上定义了以下内容:见解项目oiDeletedFolderItems;
在OnConnection方法中,我添加/更改了:oiDeletedFolderItems=已删除文件夹。项目;oiDeletedFolderItems。ItemAdd+=新建Outlook。ItemsEvents_ItemAddEventHandler(DeletedItems_ItemAdd);
激发事件(Items)的COM对象必须是活动的才能激发事件。在您的情况下,编译器会创建一个临时变量来保存对deletedFolder的调用结果。项目;一旦该变量被垃圾收集,事件就会停止激发。
将Items对象存储在类变量中,并在该对象上挂起事件。