Outlook VSTOはNewMailExイベントで発生しませんか?
質問
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 );
}
必要に応じて、この(および他の)具象ボタン(または別のオブジェクト)に特別なフィールドを設定することもできます。しかし、これは最も一般的なソリューションです。
所属していません StackOverflow