3

我们最近注意到Outlook 2007事件的一个问题,导致它在 Exchange 连接丢失然后恢复时不触发事件。如果您将侦听器附加到Folder.Items.ItemAdd事件,则在 Exchange 从脱机切换到联机后,该事件将断开连接。为了重现这一点 - 我们移除了我们的以太网电缆,以模拟短暂的连接丢失。

如果您不能保证在 Exchange 连接中断时会触发事件,那么这确实会使构建插件变得困难 - 在远程办公室操作时尤其常见。我们没有使用缓存交换模式。

是否有人对他们是否是一种解决方法有任何反馈,或者如何知道我们何时需要重新建立我们的事件侦听器?使用缓存交换模式是一种解决方案吗?或者是否有某些事件您不能可靠地使用

Exchange 连接丢失时似乎没有事件触发器。也许这里唯一的解决方法是使用某种计时器来实现可靠的事件行为。

public partial class ThisAddIn
{
  Outlook.Items sentItems;      
  private void ThisAddIn_Startup(object sender, System.EventArgs e)
  {
    Outlook.Folder sentFolder = ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
    sentItems = sentFolder.Items;
    sentItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(SentItems_ItemAdd);
  }
  void SentItems_ItemAdd(object Item)
  { // breakpoint never hit after Exchange connectivity is lost
    Outlook.MailItem mailItem = Item as Outlook.MailItem; 
  }
}
4

1 回答 1

4

解决此问题后,发现某些事件在您失去与 Exchange 的连接后不会重新建立。诸如Application.Explorers.NewExplorer和之类的事件Application.Inspectors.NewInspector不受 Exchange 连接的影响,但Folder.Items.ItemAdd会受到影响。或许这是由于 Folder'继承'的缘故MAPIFolder.Items

重新建立事件触发器的唯一解决方案是定期重新连接事件(因为我们没有事件可以告诉我们 Exchange 何时不可用)或在用户启动的操作(例如NewInspector或)期间重新附加事件MailItem.Send

MSDN 论坛建议您不要将ItemAdd事件仅用于通过 UI 使用。

于 2012-09-26T20:00:54.267 回答