[.NET] 別スレッドから UI にデータを渡すコードを 1行で書く
いや、 分かってしまえばどうということもない話なんですけど。
というか、 なんで自分で気付かなかったのか… orz
以下のコードは、 「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 / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント