2013-10-07 41 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事件,清除項目列表,然後在資源管理器的項目上設置事件接收器。選擇集合

相關問題