我想使用約會和聯繫人事件處理程序(以及稍後的任務)。Outlook中約會和聯繫人的事件處理程序
我有一個類ContactProgram執行以下代碼:
Outlook.Items myContactItems = myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts).Items;
myContactItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(myContactItems_Add);
myContactItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(myContactItems_Change);
myContactItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(myContactItems_Remove);
而且我有一個類AppointmentPogram是executs下面的代碼:如果我用這兩個事件處理程序,則
Outlook.Items myAppointmentItems = myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items;
myAppointmentItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(myAppointmentItems_Add);
myAppointmentItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(myAppointmentItems_Change);
myAppointmentItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(myAppointmentItems_Remove);
Appointment-EventHandler不會觸發。但是,如果我註釋掉創建Contact-EventHandlers的代碼,那麼Appointment-EventHandlers會被觸發。 (在我的程序中,首先創建contact-EventHandlers,然後是Appointment-EventHandler。)
我只能創建一次EventHandler,然後檢查作爲參數給出的對象的類型。但不幸的是,contact-EventHandlers指出olFolderContacts和約會事件處理程序olFolderCalendar。
有什麼建議嗎?
編輯: 我的新代碼:
...
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
public partial class ThisAddIn
{
private static Outlook.Application myApplication = new Outlook.Application();
private List<OutlookContact> allContacts = new List<OutlookContact>();
private Outlook.Folder myContactsFolder = (Outlook.Folder)myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
private ContactProgram contactProgram;
private List<OutlookAppointment> allAppointments = new List<OutlookAppointment>();
private Outlook.Folder myAppointmentsFolder = (Outlook.Folder)myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
private AppointmentProgram appointmentProgram;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
contactProgram = new ContactProgram(myApplication, allContacts, myContactsFolder);
contactProgram.Start();
appointmentProgram = new AppointmentProgram(myApplication, allAppointments, myAppointmentsFolder);
appointmentProgram.Start();
//initialise EventHandlers
//myContactItems = myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts).Items;//= myContactsFolder.Items;
Outlook.Items myContactItems = myContactsFolder.Items;
myContactItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(myContactItems_Add);
myContactItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(myContactItems_Change);
myContactItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(myContactItems_Remove);
//myAppointmentItems = myApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items;
Outlook.Items myAppointmentItems = myAppointmentsFolder.Items;
myAppointmentItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(myAppointmentItems_Add);
myAppointmentItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(myAppointmentItems_Change);
myAppointmentItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(myAppointmentItems_Remove);
}
private static void myContactItems_Add(object item)
{
ContactProgram.myContactItems_Add(item);
}
...
}
Hey SliverNinja, 感謝您的快速回答。 我移動了我的代碼,如SO帖子中所示(參見上文)。 我想我已經爲每個文件夾存儲分開處理程序,不是嗎? 問題仍然存在。 EventHandlers在一開始就開始工作,但後來不再工作。 任何幫助,將不勝感激。 – joma 2012-03-21 15:31:01
有沒有人有想法?我可以向您提供有關該問題的更多信息嗎? – joma 2012-04-16 10:03:50
'Outlook.Items myContactItems'和'Outlook.Items myAppointmentItems'需要成爲你的類的成員 - 不要在'ThisAddIn_Startup'中聲明它們,否則它們只會觸發一次,直到GC'd。如果你的事件只被解僱一次 - 它保證是你的變量獲得GC'd的範圍問題。 – SliverNinja 2012-04-16 12:44:17