2012-05-16 70 views
1

我为每个AppointmentItem的发送事件添加一个事件处理程序。这个事件处理程序只是做一些日志事件我通过Outlook 2003创建一个会议,然后更新会议两次。最后我检查日志。为什么AppointmentItem的发送事件会被多次调用?

this.Application.Inspectors.NewInspector += new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(_inspectors_NewInspector); 

private void _inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector inspector) 
{ 
    if(inspector.CurrentItem is Outlook.AppointmentItem) 
    { 
     _appointmentEvent = inspector.CurrentItem as Outlook.ItemEvents_10_Event; 
     _appointmentEvent.Send += new Microsoft.Office.Interop.Outlook.ItemEvents_10_SendEventHandler(_appointmentEvent_Send); 
    } 
} 

private void _appointmentEvent_Send(ref bool Cancel) 
{ 
    Log.WriteLog("InspectorWrapper: _appointmentEvent_Send Enter"); 
    Log.WriteLog("InspectorWrapper: _appointmentEvent_Send Exit"); 
} 

我检查日志。我发现发送事件处理程序将被多次调用。

2012-05-16 10:07:21:066:InspectorWrapper:_appointmentEvent_Send输入
2012-05-16 10:07:21:067:InspectorWrapper:_appointmentEvent_Send退出
...
2012 -05-16 10:07:27:281:InspectorWrapper:_appointmentEvent_Send输入
2012-05-16 10:07:27:283:InspectorWrapper:_appointmentEvent_Send退出
2012-05-16 10:07:27:283: InspectorWrapper:_appointmentEvent_Send输入
2012-05-16 10:07:27:284:InspectorWrapper:_appointmentEvent_Send退出
...
2012-05-16 10:07:32:607:InspectorWrapper:_appointmentEvent_Send输入
2012-05-16 10:07:32:608:InspectorWrapper:_appointmentEvent_Send退出
2012-05-16 10 :07:32:609:InspectorWrapper:_appointmentEvent_Send输入
2012-05-16 10:07:32:609:InspectorWrapper:_appointmentEvent_Send退出
2012-05-16 10:07:32:610:InspectorWrapper:_appointmentEvent_Send输入
2012-05-16 10:07:32:610:InspectorWrapper:_appointmentEvent_Send退出

为什么?

回答

0

您应该将日志记录添加到NewInspector事件中,以查看您锁定事件的次数。我的假设是NewInspector是你的问题。最好的做法是使用自定义的InspectorWrapper作为容器来管理活动检查器的列表,以避免多个事件锁定。

仅供参考,请从this MSDN reference查看FindOutlookInspector

internal static List<OutlookInspector> m_Windows;  
internal static OutlookInspector FindOutlookInspector(object window) 
{ 
    foreach (OutlookInspector inspector in m_Windows) 
     if (inspector.Window == window) 
      return inspector; 
    return null; 
} 
+1

感谢您的通知。 NewInspector只是表示这个检查器窗口是新的,并不意味着AppointmentItem是新的,也许这个AppointmentItem已经被加载了很多次。 – user1397576

相关问题