C# 替换电子邮件中文本的Outlook插件

C# 替换电子邮件中文本的Outlook插件,c#,outlook,vsto,outlook-addin,C#,Outlook,Vsto,Outlook Addin,Visual Studio 2015。展望2016年 我想写一个插件,在阅读窗格或检查器中查看电子邮件时,用超链接替换某些形式的文本 我可以订阅ItemLoad事件: private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.ItemLoad += new Microsoft.Office.Interop.Outlook.ApplicationEvent

Visual Studio 2015。展望2016年

我想写一个插件,在阅读窗格或检查器中查看电子邮件时,用超链接替换某些形式的文本

我可以订阅ItemLoad事件:

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.ItemLoad += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemLoadEventHandler(OnItemLoad);
    }

    private void OnItemLoad(object item)
    {
        Outlook.MailItem mailItem = item as Outlook.MailItem;

        if (mailItem != null)
        {
            System.Diagnostics.Debug.WriteLine("OnItemLoad: " + mailItem.Subject);
        }
    }
但是当它由于某种原因被触发时,我无法访问Outlook.MailItem实例上的任何内容。我得到以下例外情况:

类型为“System.Runtime.InteropServices.COMException”的异常 在FirstOutlookAddIn.dll中发生,但未在用户代码中处理

其他信息:无法删除项的属性和方法 在此事件过程中使用


提前谢谢

该错误消息非常明确-在某些事件处理程序中无法访问OOM属性或方法

一种解决方法是等待事件处理程序退出—或者使用其他事件(如果可用),或者在OOM事件处理程序中启用计时器,然后在计时器事件处理程序中执行您需要执行的操作(在触发OOM事件处理程序时,您将退出OOM事件处理程序)。使用窗体命名空间中的计时器类在主线程上激发

但是请记住,修改现有项目不是一个好主意-更改很可能会持续(同时更新上次修改的日期),或者Outlook会提示用户保存更改


尝试使用通过
Inspector.GetWordEditor
公开的Word编辑器。对于阅读窗格,您可以使用中的对象。

有点奇怪,您会将一个对象传递给一个您无法使用的事件处理程序,尽管我猜您可以存储引用并在以后使用。看起来有点笨重,但它起作用了。谢谢你,伙计!