我有Outlook 2013有2个帐户注册,所以问题是当我尝试将ItemAdd和ItemChange事件附加到日历帐户时,在主帐户中它完美地工作,但在第二个帐户中没有处理事件,我的代码是这样的:
Outlook.MAPIFolder calendarFolder = null;
Outlook.Items calendarItems = null;
private void AddinModule_AddinInitialize(object sender, EventArgs e)
{
calendarFolder = this.OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
calendarItems = calendarFolder.Items;
calendarItems.ItemAdd += this.ItemAdd;
calendarItems.ItemChange += this.ItemChange;
}
我认为问题是calendarItems没有显示secundary帐户的项目,因此没有处理事件,但我需要处理两个或更多日历帐户的事件。
答案 0 :(得分:0)
calendarItems变量必须在全局(类)级别声明,以防止它被垃圾收集器销毁。
答案 1 :(得分:0)
我只看到订阅默认递送商店事件的代码:
calendarFolder = this.OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
calendarItems = calendarFolder.Items;
相反,您需要遍历配置文件中的所有商店(在您的情况下为2)并使用Store类的GetDefaultFolder方法获取日历文件夹,该方法返回表示默认文件夹的Folder对象。 store和FolderType参数指定的类型。此方法类似于NameSpace对象的GetDefaultFolder方法。区别在于此方法获取与该帐户关联的传递存储上的默认文件夹,而NameSpace.GetDefaultFolder返回当前配置文件的默认存储上的默认文件夹。
Namespace类的Stores属性返回一个Stores集合对象,该对象表示当前配置文件中的所有Store对象。
P.S。我看到你使用ADX。在这种情况下,您可以使用ADXOutlookItemsEvents轻松处理Items事件。有关详细信息,请查看开发人员入门指南。