我们为Outlook Meetings创建了一个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。
我已经查找了内存泄漏,认为可能没有正确处理某些内容,并且已经在所有最终调用上添加了显式对象处理以尝试确保资源得到管理,但仍然在整个组织中获取功能。即我在开发过程中从未遇到过这个问题,在测试过程中也没遇到其所有用户都是最新的框架(3.5 SP1)和Outlook的修补程序。
有没有人对可能导致这种情况的原因有任何想法?
任何人可能有的任何想法将不胜感激。
答案 0 :(得分:0)
我不是专业人士,但由于人们发送邮件设置,我在过去自动化时遇到了麻烦。
例如,我的邮件仅在强制发送/接收周期时发送。大多数人都有即时发送的前景,当有人第一次询问真正简单的自动化脚本时,我记得有些令人头疼。
看看这是否是所有开发人员共同拥有的东西,并且用户的设置可能不同。
答案 1 :(得分: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.
}
答案 2 :(得分: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
}
}