「WPF」カテゴリーアーカイブ

Livet を用いたモードレスなウィンドウを表示するプログラム

最近知ったのですが、尾上 雅則さんが中心になって構築を進めている Livet という WPF4 のための MVVM パターン用のインフラストラクチャがあります。Expression Blend SDK(Expression Blendを持っていなくてもダウンロード・使用が可能。再配布可能なアセンブリを含んでいる)の使用が前提になりますが、ビヘイビアとアクションが豊富に提供されていたり、メッセンジャーが提供されているなど、ウィンドウとビューモデルの分離を行うのにかなり便利な機能を持っています。

前回の記事でモードレスなウィンドウの作成と作成したモードレスなウィンドウをすべて閉じる機能を持つプログラムを検証のために作りましたが、この機能を Livet を用いて作ってみました(提供されている利用例がモーダルなウィンドウのみだったので 🙂 )。なお、利用した Livet のバージョンは 0.99 です。 続きを読む Livet を用いたモードレスなウィンドウを表示するプログラム

WPF でコマンドを使用するとメモリリークする?

WPF の MVVM パターンでコマンドを利用するとメモリーリークするという話を聞いて、チョット調べてみましたが、具体的にデータを提示して指摘しているところが見当たらなかったので、試してみました。結果を書くと、アプリケーションの終了時までオブジェクトがガベージコレクションの対象にならないパターンも確かにありました。ただ、それは「コマンドを使っているから」ではなくて、オブジェクト(ウィンドウもしくはビューモデル)への参照をクリアしていない場合でした。 続きを読む WPF でコマンドを使用するとメモリリークする?

並列処理のキャンセル操作(その2)

進捗処理を追加(並列処理とUIスレッドへの追加)の実行中にキャンセルをするコードがどんな感じになるのか興味があったので、MSDN オンラインを参照しながら試行錯誤してみたのですが、とりあえず実行中に例外が起こらないものができました。ポイントは次のようなところです。

続きを読む 並列処理のキャンセル操作(その2)

並列処理のキャンセル操作(その1)

並列処理のキャンセル操作がどんな感じになるのか興味があったので、ちょっと試してみた結果です。

まずは基本的なものということで、並列処理のスレッドを1つ作って、キャンセル要求されたら単純に return することで中断するもの。

コードは、進捗報告を追加(並列処理とUIスレッドへの追加)のものから、 Parallel.For を使わないものにして、キャンセル操作を記述したものです。
続きを読む 並列処理のキャンセル操作(その1)

進捗報告を追加(並列処理とUIスレッドへの追加)

MSDN マガジンに「並列コンピューティング – SynchronizationContext こそすべて」という記事が掲載されていて、その中で「UI を更新しながら進捗状況を報告する」というトピックがあります。ちょうど並列処理とUIスレッドで書いたコードがあるので、当該コードに進捗報告を追加してみました。
追加・変更行は強調表示にしてあります。 続きを読む 進捗報告を追加(並列処理とUIスレッドへの追加)

並列処理と UI スレッド

Visual C# 2010 (と.NET Framework 4)でマルチスレッド処理がかなり楽に書けるようになっています 🙂 (参考「連載:C# 4入門 第2回 タスク並列ライブラリ」「連載:C# 4入門 第3回 TaskクラスとPLINQ(Parallel LINQ)」)。

ただ、ウィンドウ・アプリケーションだと、UI スレッドでの画面更新が必要になる制限は以前どおりで、この部分の日本語で書かれた参考ソースが(ちょっと調べた限りでは)まだ少ないです。この部分が書きやすいか、自由度はどうなのかというのに興味があったので、MSDN ライブラリを調べつつ、ちょっと書いてみました。

続きを読む 並列処理と UI スレッド