Exchange上公共文件夹上的ItemAdd事件

本文关键字:ItemAdd 事件 Exchange 文件夹 | 更新日期: 2023-09-27 18:18:11

我在将事件处理程序附加到公共文件夹的ItemAdd事件时遇到了问题。

问题是事件处理程序在几个之后停止被调用成功调用。

代码很简单。我有一个ThisAddIn类,它创建了一个对象,该对象反过来将一个函数附加到其构造函数中的ItemAdd事件。该函数只弹出一个消息框。

请给我指一下正确的方向。我就是不知道该去哪里找错误。

提前谢谢你,Anatoly

下面是我尝试运行的测试代码:

public partial class ThisAddIn
{
    internal static Outlook.Folder posts_folder = null;
    private static test t;
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        t = new test();
    }
{
class test
{
    public test()
    {
        System.Windows.Forms.MessageBox.Show("Attaching...");
        ThisAddIn.posts_folder.Items.ItemAdd +=new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
    }
    void Items_ItemAdd(object Item)
    {
        System.Windows.Forms.MessageBox.Show((Item as Outlook.PostItem).Subject);
    }
}

Exchange上公共文件夹上的ItemAdd事件

持续的谷歌搜索完成了它的工作。我找到了解决这个问题的方法。看来我不是唯一一个有这种经历的人。

我将我想要跟踪的文件夹的Items集合的引用添加到全局作用域:

internal static class stor
{
    public static Outlook.Items i;
}
public partial class ThisAddIn
{
    internal static Outlook.Folder posts_folder = null;
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        // the code for finding a posts_folder is omitted
        stor.i = posts_folder.Items;
        stor.i.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Posts_Add);
    }
    static void Posts_Add(object Item)
    {
        System.Windows.Forms.MessageBox.Show("New item");
    }
{

现在它按预期工作了。虽然我不明白所有的细节,但他们说这是一个垃圾收集问题。我的事件处理程序最终被扔进了垃圾堆。在全局作用域中对Items集合的引用可以防止这种情况发生。