我正在为Outlook Calendar编写一个C#插件,以便将约会映射到另一个系统。使用EventHandlers (例如MAPIFolderEvents_12_BeforeItemMoveEventHandler
和ItemsEvents_ItemChangeEventHandler
),我可以检测项目的移动和删除,前提是它们是单个项目或完整的循环系列。
问题是,我似乎无法检测到系列中删除了的会议。(我认为这是因为它是对校长任命的更改,而不是删除)。EventHandler查找将项目移动到DeletedItems文件夹,但在这种情况下不会发生这种情况。我在文件夹上有一个ItemChange EventHandler,但它似乎很少触发。
calendarFolder = (Outlook.Folder)Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
calendarFolder.Items.ItemChange += new ItemsEvents_ItemChangeEventHandler(calendarFolder_ItemsChange);
calendarFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(calendarFolder_BeforeItemMove);
有没有人能给我提个建议,让我知道该怎么做?
非常感谢
发布于 2019-05-23 07:10:48
您是对的,只有当定期活动的实例被删除或修改时,才会触发ItemChange
事件-删除操作仅记录在主约会上的重复blob中(您可以在OutlookSpy中查看其数据-选择约会,单击IMessage按钮,选择名为PT_BINARY的AppointmentRecur属性),并且发生的更改将保存为主约会上的附件。
但是,在代码中很少触发ItemChange
的原因是因为垃圾回收器会释放触发事件(项)的对象。您需要将calendarFolder.Items
存储在类级别的专用变量中(这样,只要您的类是活动的,GC就不会接触它),并在该变量上设置一个事件处理程序
https://stackoverflow.com/questions/56265622
复制相似问题