3

C# でスタンドアロンの Outlook WPF アプリケーションを開発しています。私がやろうとしているのは、プログラムに受信メールのパブリック フォルダーを監視させ、メールの到着をユーザーに通知させることです。

私はこれを成功させましたが、私はそれをやっている方法がぎこちないと感じています. 基本的に、私は MailItems のコレクションを構築しており、私のプログラムは、Timer を介してパブリック フォルダを再スキャンして新しいメールを探します。

私が疑問に思っているのは、コレクションを MAPIFolder または MAPIFolder.Items に直接バインドする方法があるかということです。実際には Listbox.ItemsSource を Outlook.Items オブジェクトに設定できましたが、(SysCom.Object) をリストボックス アイテムとして表示するだけです。したがって、これは可能だと思いますが、Listbox に MailItems (および Mailitem の Subject フィールドへの適切なバインド パス) のみを表示するように指示する方法が必要です。

私が最終的にやろうとしているのは、アイテムを他のリスト オブジェクトにコピーするのではなく、Outlook フォルダーを "ミラーリング" することだと思います。

4

1 に答える 1

2

recorsetにバインドするのと同じ方法でバインドする方法はありませんが、実行する必要があるのは、そのフォルダー(Items.ItemAdd / ItemChange / ItemRemove)のイベントを監視することです。

また、フォルダ内のすべてのアイテムをロードしないでください。非常に非効率的であることに加えて、RPCチャネル制限(Exchangeによって適用される)を使い果たす可能性があります。エンドユーザーに表示するのに十分なアイテムのみをロードします。ユーザーがスクロールするときに、他のアイテムをロードする必要があります。

低レベルでは、Outlookは各アイテムを個別のオブジェクトとして開く必要のないMAPIテーブルを使用します。拡張MAPIは.Net言語からは使用できませんが、RedemptionのMAPITableオブジェクト(http://www.dimastr.com/redemption/mapitable.htm)またはOutlook 2007以降のTableオブジェクト(http:/ )のいずれかを使用できます。 /msdn.microsoft.com/en-us/library/office/bb176406(v=office.12).aspx)。

于 2012-08-16T22:55:27.133 に答える