About Outlook addin events

A

Abhi.

I have problem in Outlook addin events this events just do occur
for first time only means once Item_Add event gets fired then after that no
event fires I think some where the events are washed out.
I have tried in InternalStartup() and as well in ThisApplication_Startup()
like , ldCalendar.Items.ItemAdd += new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
All is working fine but due to events problem I am not getting to the
solution.
I think, somewhere Events should be raised from where should not
washed out. Should I do some extra for it ?

Thanks.
 
K

Ken Slovak - [MVP - Outlook]

Your event handlers are most likely being garbage collected. Declare class
level objects that will keep scope as long as your code is running and
attach the event handlers to those objects.

At class level:

Outlook.Items _items;

After instantiating _items as the Calendar.Items collection then add your
event handler.

When you post here please post the Outlook version and what language and
development platform you're using so people have sufficient information to
help.
 
K

Ken Slovak - [MVP - Outlook]

As I said, add an Items collection object at class level. Also, it's not
good practice to use a lot of dot operators as you're doing. .NET creates
internal object variables for each level of dot operator and you have no
control over those, when they go out of scope or if they create memory
leaks.

You also should be using the Outlook.Application object passed to you by
VSTO and not instantiating a new Outlook.Application object. The one passed
by VSTO is trusted, the one you create isn't trusted.

I'd really suggest that you download the sample VSTO Outlook addins from the
Office development Web site at MS to see the basics of how to do things and
what some of the best practices are.

What you need to do is something like this:

using Outlook = Microsoft.Office.Interop.Outlook;

public partial class ThisApplication
{

Outlook.MAPIFolder fldCalendar = null;

Outlook._Application outlookObj = null;

Outlook.Items _items = null;

private void ThisApplication_Startup(object sender, System.EventArgs e)
{
outlookObj = this;

Outlook.NameSpace ns = outlookObj.GetNameSpace("MAPI);

fldCalendar =
ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);

_items = (Outlook.Items)fldCalendar.Items;

_items.ItemChange += new
Outlook.ItemsEvents_ItemChangeEventHandler(Items_ItemChange);

And so on.

That "_items" collection will remain in scope as long as your addin is
running and won't get garbage collected. You also see how I declare and use
separate Outlook objects instead of using multiple dot operators.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top