ItemAdd event on a public folder on Exchange

空扰寡人 提交于 2019-12-06 03:49:39

问题


I have a problem with attaching an event handler to an ItemAdd event of a public folder.

The problem is the event handler stops being called after a few successful calls.

The code is trivial. I have a ThisAddIn class which creates an object which in turn attaches a function to the ItemAdd event in its constructor. The function just pops up a messagebox.

Please point me in the right direction. I simply don't understand where to look for the error.

Thank you in advance, Anatoly

Here is the test code I try to run:

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);
    }
}

回答1:


Continuous googling did its job. I found how to resolve the issue. It appears I am not the only one who experience it.

I added the reference to Items collection of the folder I want to track to the global scope:

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");
    }
{

Now it works as expected. Alhough I do not understand all the details they say it is a garbage collection issue. My event handler eventually was thrown into the garbage. The reference to the Items collection on the global scope prevents this from happening.



来源:https://stackoverflow.com/questions/8562214/itemadd-event-on-a-public-folder-on-exchange

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!