VSTO ItemAdd 事件未触发
VSTO ItemAdd event is not firing
我有以下 VSTO 加载项代码。但是,items_ItemAdd()
方法没有被涉及。
public partial class ThisAddIn
{
Outlook.NameSpace outlookNameSpace;
Outlook.MAPIFolder inbox;
Outlook.Items items;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
outlookNameSpace = this.Application.GetNamespace("MAPI");
Debug.WriteLine("Starting Add-In");
inbox = outlookNameSpace.GetDefaultFolder(
Microsoft.Office.Interop.Outlook.
OlDefaultFolders.olFolderInbox);
items = inbox.Items;
items.ItemAdd +=
new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);
Debug.WriteLine("Started Add-In");
}
void items_ItemAdd(object Item)
{
Debug.WriteLine("New email arrived.");
Outlook.MailItem mail = (Outlook.MailItem)Item;
if (Item != null)
{
if (mail.MessageClass == "IPM.Note")
{
string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "example.html");
Debug.WriteLine("Saving to " + path);
mail.SaveAs(path, Outlook.OlSaveAsType.olHTML);
}
}
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
这与 MSDN 中给出的示例非常相似。有人有想法吗?我正在使用 VSTO Outlook 2007 加载项开发 Visual Studio 2010。在调试模式下尝试此操作,但事件未触发。我的开发机器上安装了 Outlook 2010。
我无法让 ItemsEvents_ItemAddEventHandler
工作,尽管在 class 级别声明了一些成员来绕过垃圾收集,因为这似乎是互联网上到处建议的唯一答案...
有效的是在附加事件时添加一个轻微的时间延迟,如下所示:
System.Threading.Timer timer = null;
timer = new System.Threading.Timer((obj) =>
{
ItemAddEventHandler();
timer.Dispose();
}, null, 3000, System.Threading.Timeout.Infinite);
我确实发现 NewMailEx
事件更可靠,但它有缺点,例如无法选择文件夹
听事件 on.Hope 这对某人有帮助,尽管从任何方面来看都不是一个干净的解决方案。
我有以下 VSTO 加载项代码。但是,items_ItemAdd()
方法没有被涉及。
public partial class ThisAddIn
{
Outlook.NameSpace outlookNameSpace;
Outlook.MAPIFolder inbox;
Outlook.Items items;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
outlookNameSpace = this.Application.GetNamespace("MAPI");
Debug.WriteLine("Starting Add-In");
inbox = outlookNameSpace.GetDefaultFolder(
Microsoft.Office.Interop.Outlook.
OlDefaultFolders.olFolderInbox);
items = inbox.Items;
items.ItemAdd +=
new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);
Debug.WriteLine("Started Add-In");
}
void items_ItemAdd(object Item)
{
Debug.WriteLine("New email arrived.");
Outlook.MailItem mail = (Outlook.MailItem)Item;
if (Item != null)
{
if (mail.MessageClass == "IPM.Note")
{
string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "example.html");
Debug.WriteLine("Saving to " + path);
mail.SaveAs(path, Outlook.OlSaveAsType.olHTML);
}
}
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
这与 MSDN 中给出的示例非常相似。有人有想法吗?我正在使用 VSTO Outlook 2007 加载项开发 Visual Studio 2010。在调试模式下尝试此操作,但事件未触发。我的开发机器上安装了 Outlook 2010。
我无法让 ItemsEvents_ItemAddEventHandler
工作,尽管在 class 级别声明了一些成员来绕过垃圾收集,因为这似乎是互联网上到处建议的唯一答案...
有效的是在附加事件时添加一个轻微的时间延迟,如下所示:
System.Threading.Timer timer = null;
timer = new System.Threading.Timer((obj) =>
{
ItemAddEventHandler();
timer.Dispose();
}, null, 3000, System.Threading.Timeout.Infinite);
我确实发现 NewMailEx
事件更可靠,但它有缺点,例如无法选择文件夹
听事件 on.Hope 这对某人有帮助,尽管从任何方面来看都不是一个干净的解决方案。