CREATIVEテストツール作成:::::::::::ここまで確認した内容を試してみます。]]>デバイスを選んで、ストリーム一覧を表示する機能を入れてみます。加えて、選択したストリームの設定一覧を表示する機能を入れてみます。]]>次は選択したストリームを再生して、生データを画像表示してみます。複数ストリームを指定して、再生、録画できるようにしたいので、WPFのデータテンプレート、データバインディングを使ってみたいと思います。このあたりのWPF機能の経験が浅いので練習を行い、作業を記録します。練習作業の完成予想図を下記に示します。練習でこんなの作りたいなと思いました。メインウィンドウが別ウィンドウを開き、全体にリストボックスが配置されている。リストのアイテムクラスに依存して、アイテムごとのUIが異なる仕様。リストアイテムの配置はフレキシブルに左から横詰め、幅が足りなければ下の段へ続くという動作。できましたので、どうやって作ったか示します。別ウィンドウなので、ソリューションエクスプローラのソリューション選択時のコンテキストメニューから追加→ウィンドウを選びます。メインウィンドウから別ウィンドウを開くコードは次のとおり。次のようにデータテンプレートとアイテムテンプレートセレクターを定義します。指定も必要だそうです。簡単に検索してそうするとあったのでそうしただけです。(細かいところまで理解はしていません。ついては次のページを参考に用意しました。そのまま使えるそうですね。WPFでもBindableBaseを使ってINotifyPropertyChangedを実装する最後に、使用したデータテンプレートセレクターは次のとおりに実装しています。一度経験したので、次からは調査なく設計、実装ができるようになりそう。配列に値を入れるだけで思った通りにUIが変化してくれるのはうれしいですが、準備が少々面倒くさいですね。フレームを取得するループを回そうと思います。取り出す方法で行いました。表示するようにしてみました。動作しているようです。右の画像は物体がセンサに近づくと輝度値が上がる深度画像です、素晴らしい精度ですね。指先認識プログラムを実装する意欲がぐっと上がりました。データテンプレート、バインディングを利用しているので気をつけるべき点を下記に示します。下記コードが描画ループの文です。これを別スレッドで回します。格納するという処理です。バインディングしているので、メインスレッドで格納する必要があります。これが関係して落とし穴にはまってしまいました。(抜け出し方は未だ不明です。)上記のループを行なうスレッドを実行する描画用ウィンドウがいますが、これをコードよりメインウィンドウから閉じようとしました。すれば問題なく閉じます。メインスレッドで処理を行うことをスレッド側で行うと、上記の終了処理でクラッシュします。原因追求のためステップ実行すると問題は発生しません。Invoke、ウィンドウをコードから閉じるという組み合わせで発生しメッセージボックスを途中で表示したり、デバッグでステップ実行すると発生しません。閉じたいウィンドウを閉じるボタンから閉じると問題は起きません。いうことで、これができないと先に進めなくなったらもう一度詳しく調べます。(今はあきらめて先に進めます。)(むしろ今後は別ウィンドウを開くアプリは作らないようにしようと思います。)と思いきや、サンプルでは次のとおり、ループを抜けたあとに同期を取っています。この対応を入れることで、上記で理解に苦しんだ不具合があっさり解決。このほか、引っかかった所をメモします。途中から割り込めない。自分が自由に作ったのが悪かったのですが、ストリームを再生中に別のストリームの再生を割りこませようとしたらこれに失敗しました。返り、途中参加させたストリームが失敗します。ドキュメントのサンプルのとおりの対処、つまり上記のコードで解決しました。しないと、ストリームを終了できない。しただけでは、センサは赤外線を出したまま止まらず。