2013-10-07 37 views
0

只有一次工作,比事件处理程序不工作。我不明白为什么?如何处理Outlook加载项中的事件?

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

引发事件的对象必须活着才能引发事件。在你的情况下,你正在设置一个事件同步在一个局部变量上,这个局部变量被垃圾收集,因此不再引发事件。保留在全局(类)级别引用的对象。它是你的情况,它需要是一个TaskItem对象的列表。

也就是说,千万不要设置事件接收器所有项目在一个文件夹中。你会杀死Outlook。由于用户需要在试图删除它之前选择一个项目,请处理Explorer.SelectionChange事件,清除项目列表,然后在资源管理器的项目上设置事件接收器。选择集合

相关问题