我附加到文件夹的 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);
}
}
}
触发事件的对象必须保持活动状态 - 您正在编译器创建的临时变量上设置事件处理程序。
如果您想查看哪些事件触发以及何时触发,请使用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;