2016-04-23 30 views
0

ItemsEvents_ItemAddEventHandlerを使用して新しいメールが受信されたときに正常に視聴しています。このコードは、明らかにOutlookからの同期呼び出しです(予想通りです)。Outlook VSTO - 受信トレイの状態を同期する

1つのメッセージが入った後に受信トレイを処理しようとしているため、受信プロセスのパフォーマンスが低下しています。私のプロセスは、ダウンロード全体が完了した後に実行することができます(できれば)。

私は、同期プロセスの完了にイベントハンドラが必要で、アプリケーションクラスまたはフォルダクラスでそのイベントハンドラを見つけることができないようです。

この状態またはイベントはどこに隠れていますか?

答えて

1

実際には、ItemAddイベントは非同期であり、アイテムが既に追加されて保存された後に起動します。あなたは、それがメインのOutlookスレッドで発生するという意味で正しいです。

ItemAddイベントが発生すると(タイマーがリセットされる)、タイマーを使用してアイテムを追加するまで待機することができます。タイマーが遅れて(数秒かかりますか?)、あなたはItemAddがタイマー間隔の間だけ起動していないことを確認できます。 Forms名前空間(プライマリスレッドで起動)からTimerオブジェクトを使用するようにしてください。

オブジェクトのイベント(SyncStart/SyncEndなど)を使用することもできます。SyncObjectNamespace.SyncObjectsコレクション内の最初の同期オブジェクトは「すべて送信/受信」です。

Outlookアイテム処理をセカンダリスレッドにオフロードできないことに注意してください.OOMは、メインのOutlookスレッドのみで使用できます。拡張MAPI(C++またはDelphiのみ)またはRedemptionが必要です(RDOオブジェクトファミリはセカンダリスレッドで使用できます - Namespace.MAPIOBJECTプロパティの値をメインスレッドに保存し、RDOSessionオブジェクトをセカンダリスレッドに作成してMAPIOBJECTプロパティに設定します) 。

+0

私は、タイマーの使用方法を開始し、受信メッセージが受信されるたびにリセットしました。はい、私はこの仕事をすることができますが、それは本当にクルージングのようです。私が選択する任意の時間遅延は純粋に任意であり、d/l添付ファイルへの時間などのコンテンツだけでなく、環境に完全に依存します。私はSyncObjectを調査して、それが何につながるのかを見ていきます。ありがとう。 – JamieMeyer

+0

予備テストでは、SyncObjectアプローチが有効であることが示されました。残念ながら、これはエッジの場合に基づいています - ルールではなく例外です。 SyncEndイベントが呼び出されたときはまだ明らかではありませんが、少なくともIMAP/SMTPに基づいて受信のすべてのケースに基づいているわけではありません。さらなる研究は、このアプローチが同様に変化することを示している。こんにちは、マイクロソフト?ここでいくつかの助けが必要です.... – JamieMeyer

+0

マイクロソフトではSOを監視していません。 Microsoftから何かを求めたい場合は、サポートケースを開く必要があります。 –

関連する問題