ヘッダーをスキップ
Oracle Coherenceクライアント・ガイド
リリース3.5
B56041-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

20 特別な考慮事項: .NETクライアントのWindowsフォーム・アプリケーション

INamedCacheインタフェースには、キャッシュ・コンテンツの変更時に発行されるイベントを受信する、キャッシュ・リスナーを追加する機能があります。このイベントはサーバーから送信され、バックグラウンド・スレッドによって登録済のリスナーにディスパッチされます。

.NETのシングルスレッド・アパートメント・モデルでは、あるスレッドで作成されたWindowsフォームのコントロールを別のスレッドで更新することが禁止されています。イベント通知の結果として1つ以上のコントロールを更新する場合は、キャッシュ・イベントへの応答として実行する必要のあるイベント処理コードをUIスレッド上で実行する必要があります。WindowsFormsCacheListenerヘルパー・クラスを使用すれば、エンド・ユーザーはこの事実を意識することなく、Coherenceキャッシュ・イベント(発生元は常にバックグラウンド・スレッド)をUIスレッドで発生したイベントと同様に処理できます。このクラスにより、コールがUIスレッド上で適切にマーシャリングされて実行されるようになります。

このクラスの使用例を次に示します。

例20-1 UIスレッドでのコールのマーシャリングと実行

public partial class ContactInfoForm : Form
{
    ...
    listener = new WindowsFormsCacheListener(this);
    listener.EntryInserted += new CacheEventHandler(AddRow);
    listener.EntryUpdated  += new CacheEventHandler(UpdateRow);
    listener.EntryDeleted  += new CacheEventHandler(DeleteRow);
    ...
    cache.AddCacheListener(listener);
    ...
}

AddRowUpdateRowおよびDeleteRowの各メソッドは、キャッシュ・イベントに応じてコールされます。

例20-2 キャッシュ・イベントに応じたメソッドのコール

private void AddRow(object sender, CacheEventArgs args)
{
...
}

private void UpdateRow(object sender, CacheEventArgs args)
{
...
}

private void DeleteRow(object sender, CacheEventArgs args)
{
...
}

CacheEventArgsパラメータは、キャッシュ・イベントを発生させたIObservableCacheインスタンス、発生したCacheEventType、およびキャッシュされたエントリのKeyNewValueOldValueをカプセル化します。