Outlook 2013 AddIn - 约会打开事件处理程序 - 无法访问属性

时间:2016-08-19 06:51:52

标签: c# outlook outlook-addin

我正在尝试创建Outlook 2013 AddIn,我在访问AppointmentItem的属性时遇到了一些麻烦。之后,您会找到一个缩短的示例代码:

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.ItemLoad += new Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
    }

    void Application_ItemLoad(object Item)
    {
        if (Item is Outlook.AppointmentItem)
        {
            try
            {
                    appointmentItem = Item as Outlook.AppointmentItem;

                    string sub = appointmentItem.Subject; // <--------
    ...

问题是,我无法访问appintment的属性,因为数据尚不可用于内存:

MSDN: ApplicationEvents_11_Event.ItemLoad event: Outlook项目开始加载到内存时发生此事件。除了Outlook项的Class和MessageClass属性的值之外,该项的数据尚不可用,因此在为Item中返回的Outlook项调用Class或MessageClass以外的任何属性时会发生错误。同样,如果您尝试从Outlook项目中调用任何方法,或者在Item中返回的Outlook项目上调用Application对象的GetObjectReference方法,则会发生错误。

我的AddIn背后的目标是,在功能区栏中显示DropDownBox,其中显示的项目取决于约会的主题(以及其他一些属性)的值。 那么有没有办法在事件处理程序期间访问约会的属性?或者是否有任何ohter eventhandler我可以在Appointment获得loadad时更改DropDownBox?

谢谢你&amp;问候 岸堤

1 个答案:

答案 0 :(得分:0)

有一个类似的问题,我发现注册AppointmentItem.ReadComplete处理程序时仍然无法访问属性。

但是我在AppointmentItem.Read处理程序上确实取得了一些成功。在处理程序的方法内部,我可以访问属性。

我的代码如下:

private Outlook.AppointmentItem _item;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
   this.Application.ItemLoad += 
      new Outlook.ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);
}

private void Application_ItemLoad(object item)
{
   if (item is Outlook.AppointmentItem)
   {
      this._item = item as Outlook.AppointmentItem;
      this._item.Read += _item_Read;
    }
}

private void _item_read()
{
   // Example access of Recipients property
   var recipients = this._item.Recipients;
}