C# Outlook VSTO未在NewMailEx事件中触发?

C# Outlook VSTO未在NewMailEx事件中触发?,c#,.net-3.5,outlook,vsto,C#,.net 3.5,Outlook,Vsto,我已经在C#中创建了一个VSTO,该VSTO应该用于连接Outlook 2007的NewMailEx事件。但是,当我手动发送/接收邮件,或者收件箱中只有1封未读邮件时,它有时不会触发。它似乎在邮件实际到达之前就在收件箱中启动了 除了使用VSTO的ItemAdd或NewMailEX之外,是否还有更好的方法每次监视新邮件?原因是:“GC收集.NET对象,而C wrapps COM对象来自Outlook)”。 解决方案是保留对此.NET对象的引用。最简单的方法是: // this is helper

我已经在C#中创建了一个VSTO,该VSTO应该用于连接Outlook 2007的NewMailEx事件。但是,当我手动发送/接收邮件,或者收件箱中只有1封未读邮件时,它有时不会触发。它似乎在邮件实际到达之前就在收件箱中启动了

除了使用VSTO的ItemAdd或NewMailEX之外,是否还有更好的方法每次监视新邮件?

原因是:“GC收集.NET对象,而C wrapps COM对象来自Outlook)”。 解决方案是保留对此.NET对象的引用。最简单的方法是:

// this is helper collection.
// there are all wrapper objects
// , which should not be collected by GC
private List<object> holdedObjects = new List<object>();

// hooks necesary events
void HookEvents() {
    // finds button in commandbars
    CommandBarButton btnSomeButton = FindCommandBarButton( "MyButton ");
    // hooks "Click" event
    btnSomeButton.Click += btnSomeButton_Click;
    // add "btnSomeButton" object to collection and
    // and prevent themfrom collecting by GC
    holdedObjects.Add( btnSomeButton );
}
//这是帮助器集合。
//存在所有包装器对象
//,不应由GC收集
私有列表保持对象=新列表();
//紧急事件
void HookEvents(){
//在命令栏中查找按钮
CommandBarButton btnSomeButton=FindCommandBarButton(“MyButton”);
//挂钩“点击”事件
btnSomeButton.单击+=btnSomeButton\u单击;
//将“btnSomeButton”对象添加到集合和
//并防止它们被GC收集
添加(btnSomeButton);
}
如果需要,您还可以为这个(和其他)具体按钮(或其他对象)创建一个特殊字段。但这是最常见的解决方案