C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: WPFウィンドウでのタイマーによる描画について


(過去ログ 79 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■46697 / inTopicNo.1)  WPFウィンドウでのタイマーによる描画について
  
□投稿者/ T-SS (1回)-(2010/02/09(Tue) 13:54:15)

分類:[.NET 全般] 

環境:VS2008 C# .NET Framework3.5 WPFアプリケーション

WPFウィンドウ内に、Labelを貼り付けて、タイマーを起動し、300ms間隔で描画を更新しようとしています。
タイマーイベントが発生するたびに、Label.BackgourndとForegroundプロパティを変更しています。
要は、点滅表示みたいなことをやろうとしています。
(例えば、最初は明るめの表示色・背景色、次は暗い表示色・背景色、・・・と繰り返しています)

Labelの数がすくないうちは問題ないですが、1ウィンドウ内に512個ですと、CPU使用率が10%ほど上がります。
また、そういったウィンドウを複数起動した場合には、当然その分CPU負荷が高くなってしまいました。

せっかくWPFをはじめて使用しているのに、もろにCPUに負荷がかかってしまっています。
なにかCPU負荷を極力かけないようにする方法はありますでしょうか?

引用返信 編集キー/
■46707 / inTopicNo.2)  Re[1]: WPFウィンドウでのタイマーによる描画について
□投稿者/ 中博俊 (1357回)-(2010/02/09(Tue) 16:09:18)
最終的に何がしたいのですか?
いまここに書かれていることがしたいのであればStoryBoardかなんかでかいたりするだけで対応可能<コードレス
ってことですが、そうじゃなくって何かのテストのためにやってますか?
引用返信 編集キー/
■46715 / inTopicNo.3)  Re[2]: WPFウィンドウでのタイマーによる描画について
□投稿者/ T-SS (2回)-(2010/02/09(Tue) 18:49:11)
今はまだサンプルですが、最終的にウィンドウ上にあるLabelが、
あるメモリの状態を監視していて、そのメモリが更新された場合に、
該当ラベルを点滅表示したいのです。

例えば、Labelが100個あるとして、それぞれがint[100]配列 の該当の状態を示しています。
int[0]が0のときはLabel背景色が赤⇔暗い赤、
1のときはLabel背景色が黄⇔暗い黄色となるような状態です。
ただし、この背景色はLabelぞれぞれに設定できるようにするつもりです。
(INIファイルやCSVファイルなどの設定データ)

その際、点滅表示時のCPU負荷をなるべく低くしたいのです。
タイマーで行う場合にはCPU負荷がやたらと上がってしまうのです。
(今は、あらかじめブラシを2つ作成しておき(赤ブラシ、暗い赤ブラシ)、
タイマーイベント時にBackgroundプロパティに該当するほうの
ブラシを設定するようにしています。)



引用返信 編集キー/
■46726 / inTopicNo.4)  Re[3]: WPFウィンドウでのタイマーによる描画について
□投稿者/ よねKEN (438回)-(2010/02/09(Tue) 21:07:14)
No46715 (T-SS さん) に返信
> その際、点滅表示時のCPU負荷をなるべく低くしたいのです。
> タイマーで行う場合にはCPU負荷がやたらと上がってしまうのです。

「タイマーで行う場合」とあるので、「タイマーで行わない場合」と比較されているのだと思いますが、
「タイマーで行わない場合」にどうやって同じことを実現しているのでしょうか?

> (今は、あらかじめブラシを2つ作成しておき(赤ブラシ、暗い赤ブラシ)、
> タイマーイベント時にBackgroundプロパティに該当するほうの
> ブラシを設定するようにしています。)

それと「タイマーで行う場合」というのは具体的にどんなコードなんでしょうか?
検証可能なミニマムコードがないと話が進まないように思います。
(ついでに確認している環境についてOSやPCのスペックなどの記載もあった方がよいでしょう)

引用返信 編集キー/
■46734 / inTopicNo.5)  Re[4]: WPFウィンドウでのタイマーによる描画について
□投稿者/ 中博俊 (1358回)-(2010/02/10(Wed) 08:47:34)
そのようなことをしたいのであればタイマーは不要ですね。
ViewModel側が変更されればWPFでは見た目は変化します。
点滅させたいのであればアニメーション系をキックするような形にすればいいでしょう。

300msごとに再描画という考え方自体WindowsFormの伝統を意味なく引っ張ってきているので、まずはWPF流儀に則って作り直して再度検証ですね〜
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -