C#VSTO Outlook ItemSend事件执行顺序

时间:2015-09-22 08:45:44

标签: c# outlook vsto outlook-addin

我正在使用VSTO在发送电子邮件时创建活动。目标是改变附件。 我已经有其他在ItemSend事件中运行的插件,但问题是,我希望我的插件首先运行。正如我所读,Outlook addins发送事件中没有执行顺序,但即使只是通过名称或guid也必须有一些命令....

我尝试这个解决方案(问题是,如果我打开2个邮件窗口,第一个窗口不运行事件...... :(有一些覆盖事件问题)

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    this.Application.Inspectors.NewInspector += new InspectorsEvents_NewInspectorEventHandler(Custom_Inspector);

    //This run in the end off all ItemSend Events.... :(
    //this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(MyFunction2);
}

private void Custom_Inspector(Inspector Inspector)
{
    if (Inspector != null && Inspector.CurrentItem != null && Inspector.CurrentItem is Outlook.MailItem)
    {
        Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;


        if (mailItem.EntryID == null)
        {
           ((ItemEvents_10_Event)mailItem).Send += new ItemEvents_10_SendEventHandler(MyFunction);
       }

    }
}

void MyFunction(ref bool Cancel)
{

    MailItem mailItemContext = ((Inspector)this.Application.ActiveWindow()).CurrentItem as MailItem;

    if (mailItemContext != null)
    {
         //my custom code here     
    }
}

2 个答案:

答案 0 :(得分:1)

  

this.Application.Inspectors.NewInspector + = new InspectorsEvents_NewInspectorEventHandler(Custom_Inspector);

要获取Inspectors类的NewInspector事件,您需要保持源对象处于活动状态,即防止它被垃圾收集器滑动。因此,我建议在全局范围内声明Inspectors类的实例 - 在类级别。

Outlook对象模型不提供任何用于更改事件顺序的内容。根据我的经验,加载项基于ProgID值加载(按字母顺序排序),事件以相反的顺序触发,即LIFO队列。

答案 1 :(得分:0)

Eugene 100000谢谢!实际上Outlook Order Plugin事件按字母顺序反转。 但顺便说一句,如何将NewInspector设置为顶级?我需要定义内部类ThisAddIn一个道具调用:

   public partial class ThisAddIn
{
        public Microsoft.Office.Interop.Outlook.Inspectors _inspector;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            _inspector = this.Application.Inspectors;
            _inspector.NewInspector += new InspectorsEvents_NewInspectorEventHandler(Custom_Inspector);
        }

}