Outlook Banter

Outlook Banter (http://www.outlookbanter.com/)
-   Add-ins for Outlook (http://www.outlookbanter.com/add-ins-outlook/)
-   -   About Outlook addin events (http://www.outlookbanter.com/add-ins-outlook/78336-about-outlook-addin-events.html)

Abhi. September 9th 08 05:04 PM

About Outlook addin events
 

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_ItemA ddEventHandler(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.



Ken Slovak - [MVP - Outlook] September 9th 08 05:17 PM

About Outlook addin events
 
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.

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007.
Reminder Manager, Extended Reminders, Attachment Options.
http://www.slovaktech.com/products.htm


"Abhi." wrote in message
...

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_ItemA ddEventHandler(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.




Abhi.[_2_] September 10th 08 02:09 PM

About Outlook addin events
 

Hello Ken,
Thanks for your reply.
I am using VS 2005 C# Office Outlook add-in for Outlook 2003. My code is
like,

public partial class ThisApplication
{

Microsoft.Office.Interop.Outlook.MAPIFolder fldCalendar = null;
Microsoft.Office.Interop.Outlook._Application outlookObj = new
Microsoft.Office.Interop.Outlook.Application();

private void ThisApplication_Startup(object sender, System.EventArgs e)
{
fldCalendar =
(Microsoft.Office.Interop.Outlook.MAPIFolder)outlo okObj.Session.GetDefaultFolder(Microsoft.Office.In terop.Outlook.OlDefaultFolders.olFolderCalendar);
fldCalendar.Items.ItemChange += new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemC hangeEventHandler(Items_ItemChange);
fldCalendar.Items.ItemAdd += new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd);
fldCalendar.Items.ItemRemove += new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemR emoveEventHandler(Items_ItemRemove);


}


private void Items_ItemAdd(object Item)
{
}

private void Items_ItemChange(object Item)
{
}

private void Items_ItemRemove()
{
}

private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisApplication_Startup);
this.Shutdown += new
System.EventHandler(ThisApplication_Shutdown);
}
}
even I tried with,

private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisApplication_Startup);
this.Shutdown += new
System.EventHandler(ThisApplication_Shutdown);

((Microsoft.Office.Interop.Outlook.MAPIFolder)outl ookObj.Session.GetDefaultFolder(Microsoft.Office.I nterop.Outlook.OlDefaultFolders.olFolderCalendar)) .Items.ItemAdd
+= new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd);

((Microsoft.Office.Interop.Outlook.MAPIFolder)outl ookObj.Session.GetDefaultFolder(Microsoft.Office.I nterop.Outlook.OlDefaultFolders.olFolderCalendar)) .Items.ItemChange
+= new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemC hangeEventHandler(Items_ItemChange);

((Microsoft.Office.Interop.Outlook.MAPIFolder)outl ookObj.Session.GetDefaultFolder(Microsoft.Office.I nterop.Outlook.OlDefaultFolders.olFolderCalendar)) .Items.ItemRemove
+=new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemR emoveEventHandler(Items_ItemRemove);
}

So where should I add event handler now in order to avoid from being garbage
collected ?
Any other way to do this?
Thanks.

Abhi


"Ken Slovak - [MVP - Outlook]" wrote:

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.

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007.
Reminder Manager, Extended Reminders, Attachment Options.
http://www.slovaktech.com/products.htm


"Abhi." wrote in message
...

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_ItemA ddEventHandler(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.





Ken Slovak - [MVP - Outlook] September 10th 08 03:23 PM

About Outlook addin events
 
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.olFol derCalendar);

_items = (Outlook.Items)fldCalendar.Items;

_items.ItemChange += new
Outlook.ItemsEvents_ItemChangeEventHandler(Items_I temChange);

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.

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007.
Reminder Manager, Extended Reminders, Attachment Options.
http://www.slovaktech.com/products.htm


"Abhi." wrote in message
...

Hello Ken,
Thanks for your reply.
I am using VS 2005 C# Office Outlook add-in for Outlook 2003. My code is
like,

public partial class ThisApplication
{

Microsoft.Office.Interop.Outlook.MAPIFolder fldCalendar = null;
Microsoft.Office.Interop.Outlook._Application outlookObj = new
Microsoft.Office.Interop.Outlook.Application();

private void ThisApplication_Startup(object sender, System.EventArgs e)
{
fldCalendar =
(Microsoft.Office.Interop.Outlook.MAPIFolder)outlo okObj.Session.GetDefaultFolder(Microsoft.Office.In terop.Outlook.OlDefaultFolders.olFolderCalendar);
fldCalendar.Items.ItemChange += new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemC hangeEventHandler(Items_ItemChange);
fldCalendar.Items.ItemAdd += new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd);
fldCalendar.Items.ItemRemove += new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemR emoveEventHandler(Items_ItemRemove);


}


private void Items_ItemAdd(object Item)
{
}

private void Items_ItemChange(object Item)
{
}

private void Items_ItemRemove()
{
}

private void InternalStartup()
{
this.Startup += new
System.EventHandler(ThisApplication_Startup);
this.Shutdown += new
System.EventHandler(ThisApplication_Shutdown);
}
}
even I tried with,

private void InternalStartup()
{
this.Startup += new
System.EventHandler(ThisApplication_Startup);
this.Shutdown += new
System.EventHandler(ThisApplication_Shutdown);

((Microsoft.Office.Interop.Outlook.MAPIFolder)outl ookObj.Session.GetDefaultFolder(Microsoft.Office.I nterop.Outlook.OlDefaultFolders.olFolderCalendar)) .Items.ItemAdd
+= new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemA ddEventHandler(Items_ItemAdd);

((Microsoft.Office.Interop.Outlook.MAPIFolder)outl ookObj.Session.GetDefaultFolder(Microsoft.Office.I nterop.Outlook.OlDefaultFolders.olFolderCalendar)) .Items.ItemChange
+= new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemC hangeEventHandler(Items_ItemChange);

((Microsoft.Office.Interop.Outlook.MAPIFolder)outl ookObj.Session.GetDefaultFolder(Microsoft.Office.I nterop.Outlook.OlDefaultFolders.olFolderCalendar)) .Items.ItemRemove
+=new
Microsoft.Office.Interop.Outlook.ItemsEvents_ItemR emoveEventHandler(Items_ItemRemove);
}

So where should I add event handler now in order to avoid from being
garbage
collected ?
Any other way to do this?
Thanks.

Abhi




All times are GMT +1. The time now is 09:00 PM.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com