質問

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

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

役に立ちましたか?

解決

理由は、「GCは.NETオブジェクトを収集し、これはOutlookからCOMオブジェクトをラップします」)です。 解決策は、この.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 );
}

必要に応じて、この(および他の)具象ボタン(または別のオブジェクト)に特別なフィールドを設定することもできます。しかし、これは最も一般的なソリューションです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top