2

我们为 Outlook 会议创建了一个 VSTO 插件。

作为其中的一部分,我们捕获事件SendEvent的消息FormRegionShowing

_apptEvents.Send += new Microsoft.Office.Interop.Outlook.ItemEvents_SendEventHandler(_apptEvents_Send);

然后该方法_apptEvents_Send测试几个属性并在适当的地方退出。

private void _apptEvents_Send(ref bool Cancel)
{
    if (!_Qualified)
    {
        MessageBox.Show("Meeting has not been qualified", "Not Qualified Meeting", MessageBoxButtons.OK, MessageBoxIcon.Information);
        chkQualified.Focus();
        Cancel = true;
    }
}

我们遇到的问题是某些用户的消息被发送了两次。一次是在发送会议时,第二次是在用户重新打开 Outlook 时。

我一直在寻找内存泄漏,认为某些东西可能没有被正确处理,并在所有 finally 调用中添加了显式对象处理,以尝试确保资源得到管理,但仍然在整个组织中不一致地获得功能。即我在开发过程中从未遇到过问题,在测试期间也没有其他开发人员遇到过。所有用户都是最新的框架 (3.5 SP1) 和 Outlook 修补程序。

有没有人对可能导致这种情况的原因有任何想法?

任何人可能有的任何想法都将不胜感激。

4

3 回答 3

0

为什么要使用Microsoft.Office.Interop.Outlook.ApplicationEvents_10.Send Event而不是一遍又一遍地添加给定的处理程序。

在您的 vsto 插件的启动方法上,只需添加:

((MSOutlook.ApplicationEvents_10_Event)_OutlookApp).ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_10_ItemSendEventHandler(Utils_ItemSend);

void Utils_ItemSend(object Item, ref bool Cancel)
{
    //Do your operation here.
}
于 2008-12-15T16:11:37.073 回答
0

我不是专业人士,但由于人们的发送邮件设置,我过去在进行 Outlook 自动化时遇到了麻烦。

例如,我的邮件仅在我强制发送/接收周期时发送。大多数人都可以立即发送前景,我记得当有人第一次要求真正简单的自动化脚本时有些头疼。

看看这是否是所有开发人员的共同点,而用户的设置可能不同。

于 2008-12-12T14:27:48.507 回答
0

你做的是小错误。更改您的代码如下

 private void _apptEvents_Send(ref bool Cancel)
 {
    if (!_Qualified)
    {
    MessageBox.Show("Meeting has not been qualified", "Not Qualified Meeting", 
    MessageBoxButtons.OK, MessageBoxIcon.Information);
    chkQualified.Focus();
    Cancel = true;
    return; // need to add this one line
  }
}
于 2020-07-14T09:35:47.657 回答