« [.NET] Web サーバーから RSS フィードを読み込む | トップページ | [.NET] WebClient オブジェクトは Encoding を自動認識してほしい、というフィードバックをしました »

2009年10月 4日 (日)

[.NET] 別スレッドから UI にデータを渡すコードを 1行で書く

いや、 分かってしまえばどうということもない話なんですけど。
というか、 なんで自分で気付かなかったのか… orz

《Amazon》 Silverlight で開発するデータ駆動アプリケーション 以下のコードは、 「Silverlight で開発するデータ駆動アプリケーション」 の p.195 ~ 196 のものを少し改修。

まず、 一般的には次のようなデリゲートを用意しておいて…

private delegate void
  dBindTheList(List<DiggStory> list);

private void BindTheList(List<DiggStory> list) {
  lstResults.DataContext = list;
}

別スレッド側から、 BeginInvoke() します。

this.Dispatcher.BeginInvoke(
  new dBindTheList(this.BindTheList), list)

これだと、 全部で 5行くらい書くことになります。
次に、 デリゲートをここでしか使わないなら、 匿名デリゲートを使うという手があって…

private delegate void dBindTheList();

this.Dispatcher.BeginInvoke(
    (dBindTheList)delegate(){
        lstResults.DataContext = list;
    }
);

でも、 そんなに行数は変わりません。
ここで、 目からウロコ。 ラムダ式を使えば、 たった 1行で !

this.Dispatcher.BeginInvoke((Action)(() => { lstResults.DataContext = list; }));

※ VB.NET では、 値を返さないラムダ式がサポートされていないので、 この方法は使えないはずです。

|

« [.NET] Web サーバーから RSS フィードを読み込む | トップページ | [.NET] WebClient オブジェクトは Encoding を自動認識してほしい、というフィードバックをしました »

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [.NET] 別スレッドから UI にデータを渡すコードを 1行で書く:

« [.NET] Web サーバーから RSS フィードを読み込む | トップページ | [.NET] WebClient オブジェクトは Encoding を自動認識してほしい、というフィードバックをしました »