2

Outlook 2007 の NewMailEx イベントをフックするはずの VSTO を C# で作成しました。ただし、手動で送受信したり、受信トレイに未読メールが 1 件しかない場合に起動しないことがあります。メッセージが実際に到着する前に、受信トレイで起動したように見えます。

VSTO を使用して ItemAdd または NewMailEX 以外に、毎回新しいメッセージを監視するより良い方法はありますか?

4

1 に答える 1

3

その理由は次のとおりです。「GC は .NET オブジェクトを収集します。これにより、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 );
}

必要に応じて、この (およびその他の) 具体的なボタン (または別のオブジェクト) 用の特別なフィールドを作成することもできます。しかし、これは最も一般的な解決策です。

于 2008-10-15T10:59:40.787 に答える