只有一次工作,比事件处理程序不起作用。我不明白为什么?
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?
}
答案 0 :(得分:1)
引发事件的对象必须处于活动状态才能引发事件。在这种情况下,您正在为收集垃圾的本地变量设置事件同步,因此不再引发事件。保持在全局(类)级别引用的对象。在您的情况下,它需要是TaskItem对象的列表。
话虽如此,不要在文件夹中的所有项目上设置事件接收器。你将杀死Outlook。由于用户在尝试删除项目之前需要选择项目,因此请处理Explorer.SelectionChange事件,清除项目列表,然后在Explorer.Selection集合中的项目上设置事件接收器