我正在开发outlook加载项,我必须跟踪约会项目添加,更改和&删除事件。 所以我使用波纹管代码。
public Microsoft.Office.Interop.Outlook.Application app = null;
public Outlook.NameSpace ns = null;
public Outlook.MAPIFolder calendar = null;
public Outlook.Items appointments = null;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
app = Application;
ns = app.GetNamespace("mapi");
ns.Logon("", "", true, true);
calendar = ns.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
appointments = calendar.Items;
appointments.ItemAdd += Item_Add;
appointments.ItemChange += Item_Change;
appointments.ItemRemove += Item_Remove;
}
private void Item_Add(object item)
{
// some logic
}
private void Item_Change(object item)
{
// some logic
}
private void Item_Remove()
{
// some logic
}
现在当我在那个时候添加会议时,Item_Add
事件被调用。
当我更新创建的会议时,Item_Change
事件被触发2次。
我无法理解为什么它会发射2次。
任何人都可以说明理由吗?
答案 0 :(得分:0)
首先,我建议在全局范围内声明Items
对象,以确保垃圾收集器不会刷它。例如,您可以在Startup事件处理程序之外声明Items
对象。
更改指定集合中的项目时会触发Items类的ItemChange事件。因此,每次更改任何属性时都会触发它。
答案 1 :(得分:0)
如果项目多次保存,则会多次触发该事件。你应该准备好处理像。
这样的情况您的事件处理程序应该做什么?为什么这是一个问题?
答案 2 :(得分:0)
我没有找到任何完全清晰的解决方案。我实施的最好的想法是创建已处理任务的列表,并为它们设置时间有效性。
在事件开始时,我检查是否有任何已处理的任务已过时,并将其从列表中删除。这样,我可以使列表保持较小并防止内存泄漏。
non-equi
如果您对有效的解决方案感兴趣,可以在repository中找到以上代码。