VSTO ItemAdd事件未触发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VSTO ItemAdd事件未触发相关的知识,希望对你有一定的参考价值。

我有以下VSTO加载项代码。然而,items_ItemAdd()方法并没有被暗杀。

public partial class ThisAddIn
    {
        Outlook.NameSpace outlookNameSpace;
        Outlook.MAPIFolder inbox;
        Outlook.Items items;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            outlookNameSpace = this.Application.GetNamespace("MAPI");
            Debug.WriteLine("Starting Add-In");
            inbox = outlookNameSpace.GetDefaultFolder(
                    Microsoft.Office.Interop.Outlook.
                    OlDefaultFolders.olFolderInbox);
            items = inbox.Items;
            items.ItemAdd +=
                new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);
            Debug.WriteLine("Started Add-In");
        }

        void items_ItemAdd(object Item)
        {
            Debug.WriteLine("New email arrived.");
            Outlook.MailItem mail = (Outlook.MailItem)Item;
            if (Item != null)
            {
                if (mail.MessageClass == "IPM.Note")
                {
                    string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "example.html");
                    Debug.WriteLine("Saving to " + path);
                    mail.SaveAs(path, Outlook.OlSaveAsType.olHTML);
                }
            }
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }

这与MSDN中给出的例子非常相似有没有人有想法?我正在使用VSTO Outlook 2007加载项在Visual Studio 2010中进行开发。在调试模式下尝试此操作但事件未触发。我在我的开发机器上安装了Outlook 2010。

答案

我无法让ItemsEvents_ItemAddEventHandler工作,尽管在课堂上宣布一些成员来解决垃圾收集问题,因为这似乎是互联网上随处可见的唯一答案......

在附加事件时添加稍微延迟的工作是什么,如下所示:

System.Threading.Timer timer = null;
timer = new System.Threading.Timer((obj) =>
{
    ItemAddEventHandler();
    timer.Dispose();
}, null, 3000, System.Threading.Timeout.Infinite);

我确实发现NewMailEx事件更可靠但它有它的缺点,例如无法选择文件夹来监听事件。希望这可以帮助某人,尽管它不是任何措施的干净解决方案。

以上是关于VSTO ItemAdd事件未触发的主要内容,如果未能解决你的问题,请参考以下文章

未触发opengl片段着色器条件语句

Laravel 推送事件未触发

将通知设置为在某个用户事件时触发

MediaRecorder 'ondataavailable' 事件未触发

SoundCloud 小部件事件未触发

Google Maps API 标记点击事件未触发 [重复]