c# – 多线程Outlook Application.ItemSend事件?
发布时间:2020-12-16 02:00:25 所属栏目:百科 来源:网络整理
导读:我正在开发一个Outlook加载项,它挂钩到Application.ItemSend事件中,以便在发送之前对电子邮件进行一些更改.具体来说,它会根据电子邮件内容添加/删除一些附件. 这种后处理涉及到互联网,一些计算以及可能与用户的一些交互.用户甚至可以取消该过程,因此我们可能
我正在开发一个Outlook加载项,它挂钩到Application.ItemSend事件中,以便在发送之前对电子邮件进行一些更改.具体来说,它会根据电子邮件内容添加/删除一些附件.
这种后处理涉及到互联网,一些计算以及可能与用户的一些交互.用户甚至可以取消该过程,因此我们可能需要通过将ItemSend事件处理程序的Cancel参数设置为true来完全取消发送. 问题是,虽然这通常很快,但可能需要一段时间 – 在此期间Outlook完全冻结. 那么,如何在单独的线程中执行此操作,同时仍保留取消发送的权限?似乎延迟发送的唯一方法是实际占用整个消息线程,这看起来很奇怪. 码: private void ThisAddIn_Startup(object sender,System.EventArgs e) { Application.ItemSend+=OnItemSend; } private void OnItemSend(object Item,ref bool Cancel) { Outlook.MailItem mail=Item as Outlook.MailItem; if (mail!=null) { Outlook.Attachments atts=mail.Attachments; /* ...lengthy processing on 'atts',during which Outlook is frozen... */ Cancel=/* result of lengthy processing */ } } 解决方法
取消提交,保存消息,读取其条目ID.启动一个单独的线程来进行处理(不要触摸该线程中的OOM!).当辅助线程完成时,运行将通过其条目ID重新打开项目的主线程代码并修改附件,再次发送消息. ItemSend甚至会再次触发,但你这次可以忽略它(自定义属性或标志?).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |