如何处理outlook加载项中的事件?

时间:2013-10-07 11:56:47

标签: events event-handling outlook outlook-addin

只有一次工作,比事件处理程序不起作用。我不明白为什么?

private void ThisAddIn_Startup(object sender, System.EventArgs e) {
    var folder = Globals.ThisAddIn.Application.Session.DefaultStore.
                   GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks);
    foreach(Outlook.TaskItem item in folder.Items) {
        item.BeforeDelete += BeforeDelete;
        item.Save();
    }
}

private void BeforeDelete(object item, ref bool cancel) {
    MessageBox.Show("Удалено");
    // Marshal.ReleaseComObject(item); must I do It?
}

1 个答案:

答案 0 :(得分:1)

引发事件的对象必须处于活动状态才能引发事件。在这种情况下,您正在为收集垃圾的本地变量设置事件同步,因此不再引发事件。保持在全局(类)级别引用的对象。在您的情况下,它需要是TaskItem对象的列表。

话虽如此,不要在文件夹中的所有项目上设置事件接收器。你将杀死Outlook。由于用户在尝试删除项目之前需要选择项目,因此请处理Explorer.SelectionChange事件,清除项目列表,然后在Explorer.Selection集合中的项目上设置事件接收器