我有一个阅读窗格的表单区域。我检索转发邮件项目的wordeditor,然后将信息添加到word文档。当我不在同一个功能中创建和发送电子邮件时,这似乎有效,但当我想创建转发电子邮件,编辑它并发送它时,Email.Body不会更新。
_email = this.OutlookItem as Outlook.MailItem;
private void SendForwardEmail()
{
Outlook.MailIem fEmail = null;
Word.Document doc = null;
try
{
fEmail = ((Outlook._MailItem)_email).Forward();
doc = GetWordEditor(fEmail);
EditDoc(doc);
var tmp = doc.Range().Text;
var tmp1 = fEmail.Body; // tmp1 won't have what I added to tmp
((Outlook._MailItem)fEmail).Send(); // This will send with the fEmail.Body value
// and won't show edits to the word doc
}
finally
{
Release(doc);
Release(fEmail);
}
}
我在表单区域中使用类似的代码来编写电子邮件,不同之处在于,当触发Send
事件时,Email.Body已更新为对单词doc的编辑。我试过了fEmail.Save()
,但似乎没有用。单词编辑器确实保存了工作,因为我可以在不同的点访问单词编辑器,它仍然会有编辑。 Email.Body只是不随更改而更新。
编辑:我将补充说,执行以下操作会更新Email.Body
,但似乎是一个时髦的解决方案。
fEmail.Display();
((Outlook.MailItem)fEmail).Close(Outlook.OlInspectorClose.olSave);
答案 0 :(得分:0)
您在何时何地运行代码?它是在次要线程上吗?
无论如何,我建议立即从释放所有底层COM对象开始。完成使用后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject
释放Outlook / Word对象。然后在Visual Basic中将变量设置为Nothing(C#中为null)以释放对该对象的引用。请在Systematically Releasing Objects文章中详细了解相关内容。