1

我附加到文件夹的 ItemAdd 事件的处理程序没有触发。我不知道为什么。该变量folderTestItems是在类级别声明的,所以它不应该被垃圾收集,对吧?我已经浏览了调试器中的代码,并且正在附加处理程序:folderTestItems.Items.ItemAdd += Items_ItemAdd;

我正在将文件夹收件箱中的一条消息拖到文件夹 TEST 中。该动作不会导致ItemAdd触发吗?如果没有,我如何检测该动作?

 public partial class ThisAddIn
    {

        Outlook.MAPIFolder folderTestItems;
    <snip>

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            Outlook.NameSpace nameSpace = this.Application.GetNamespace("MAPI");
            Outlook.MAPIFolder folderInbox = nameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            folderTestItems = folderInbox.Folders["TEST"];


            if (folderTestItems != null)
            {
               // we do get here
                folderTestItems.Items.ItemAdd += Items_ItemAdd;
            }

          }

private void Items_ItemAdd(object Item)
        {
            // we never get here
            if (Item is Outlook.MailItem)
            {
                Outlook.MailItem mailItem =  (Item as Outlook.MailItem);
                string itemMessage = "The item is an e-mail message." +
                    " The HTMLBody is " + mailItem.HTMLBody + ".";
                mailItem.Display(false);
                MessageBox.Show(itemMessage);


            }
        }



     }
4

1 回答 1

0

触发事件的对象必须保持活动状态 - 您正在将事件处理程序设置在编译器创建的临时变量上。

如果您想查看哪些事件触发以及何时触发,请使用OutlookSpy查看文件夹- 转到相关文件夹,单击 OutlookSpy 功能区上的文件夹按钮,选择项目属性,单击浏览,转到事件选项卡,查看在选项卡底部的日志中。

public partial class ThisAddIn

    Outlook.Items _items;
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        ...
        _items =  nameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).Items;
        _item.ItemAdd += Items_ItemAdd;
于 2016-02-24T16:18:14.590 回答