您好我有一段C#代码可以访问Outlook约会重复发生模式中的异常约会。我意识到,当代码尝试访问AppointmentItem
对象的Exception
属性时,如果Exception.Deleted
为true
,则会有一个COM异常说“您更改了此项目的一次重复,此实例不再存在。关闭所有打开的项目,然后重试。“
我在代码中获得的主AppointmentItem
对象直接来自Folder.Items.ItemChange
事件,这是代码的摘录:
private static void OnAppointmentChanged(AppointmentItem appointment)
{
if(appointment.IsRecurring)
{
var pattern = outlookAppointment.GetRecurrencePattern();
foreach (Exception e in pattern.Exceptions)
{
// This will throw the exception if e.Deleted == true.
var occurence = e.AppointmentItem;
}
}
}
虽然这个问题已经discussed here in the Visual Studio forum,但标记的解决方案并不是真正的解决方案,因为我的Outlook 2013是比解决方案中提到的更高版本(15.0.4693.1001 32位)。
有谁知道为什么会这样?
答案 0 :(得分:1)
Exception类的Deleted属性返回一个布尔值,指示是否从重复模式中删除了AppointmentItem。它可能不再存在于日历上。
您可以处理在删除项目(父对象的实例)之前触发的AppointnentItem类的BeforeDelete事件。 Appointment项的实例作为参数传递。您也可以取消将取消参数设置为true的操作。
最有可能有一个更适合您需求的解决方案。为什么需要访问不存在的项目?