WPFで画面キャプチャをつくりたい

| コメント(0) | トラックバック(0)

Formでつくって、とても遅い気がしたので、WPFにしたいと思ったところからはじまる。

いろんなところを検索して、キャプチャしたビットマップデータを表示するところまではできた。
しかし、リアルタイムで更新するにはタイマーか・・・ツールボックスに無い。

Thread.Timerを使うと、Imageへビットマップを設定するところで、違うスレッドが所有してるから変更できないとかの例外が発生する。

で、探して、見つけた↓。
WPF のスレッド: Dispatcher を使用して応答性の高いアプリケーションを構築する

そうそう、BackgroundWorker使えるんだよ。

じゃぁ、ってことで、backgroundWorker_DoWorkに全部処理を突っ込んだら、同じ例外。

backgroundWorker_RunWorkerCompletedに処理を移したら、問題なし。

で、Image.Sourceに突っ込むところだけをbackgroundWorker_RunWorkerCompletedに残してあとはbackgroundWorker_DoWorkへ移動。

例外復活。

Sourceに突っ込むために、ビットマップをBitmapSourceに突っ込む処理もbackgroundWorker_RunWorkerCompletedでやらなきゃならんらしい。

backgroundWorker_RunWorkerCompletedはUIと同じスレッドで動作するらしく、そのため、UI(WPF)系のコンポーネント操作で例外が出ないらしい。
覚えておこう。

そうこうして、一応できたわけだが、画面取得間隔を短くすると、メモリリークで(はないけれど)システムが重くなる。

おまけに、画面キャプチャする部分はFormアプリからの流用なので、多分、ここもネックになっているようだ。

まだまだ修行が足りない。

トラックバック(0)

トラックバックURL: http://blog.fne.jp/mt/mt-tb.cgi/51

コメントしちゃいなよ

    

サイトカウンタ

Total: 201,736 Hits, (Recent24Hours: 39 Hits)
~ Since 2010/01 ~

埋め込みツイッター

取得失敗;;
Now: 2017/08/24 15:40:39 JST

このブログ記事について

このページは、ふぅみんが2009年12月18日 14:41に書いたブログ記事です。

ひとつ前のブログ記事は「Drag&Drop対応ついっとばー」です。

次のブログ記事は「WPFで画面キャプチャをつくりたい 2」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2017年8月

 日   月   火   水   木   金   土 
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

埋め込みQRコード