1

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

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?
}
4

1 回答 1

1

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

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

于 2013-10-07T18:04:27.373 回答