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

わんくま同盟

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

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

■92577 / 2階層)  rgbによるbackcolorの表示
□投稿者/ 大谷刑部 (38回)-(2019/10/08(Tue) 16:35:24)
No92573 (魔界の仮面弁士 さん) に返信
> ■No92572 (C#初心者 さん) に返信
>>グラデーション形式で黒から白、白から黒に変更するものを作成したいのですが、途中の表示がうまくいきません。
>
> 画面描画は「イベント処理を抜けた後」のアイドル時に行われるためです。
> 処理中(ビジー状態)は直ちに反映されません。
なので、sleepとプロパティーの設定だけだと肉眼で確認する前に次の色に変わっているという現象になっていると想像されます。

> 100 ミリ秒ごとに背景色を変えたいのであれば、ループ処理で実行するのではなく、
> Timer を画面に貼り、Interval を 100ミリ秒程度にした上で、
> Tick イベントが発生するたびに、BackColor を変更するようにしてみてください。
こっちのやり方の方が結果的に書くコードはシンプルになるのかもしれませんね。
ただまあ、この程度の処理(白⇔黒)であれば、メモリ負荷とかにそれほどクリティカルな影響はないのforループでもいいんじゃないでしょうか?
3原色分全部ループ(255の3重ループ)とかなら明らかにやめた方がいいとは思いますが。

>>Thread.Sleep(100);
>
> 画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。
win7 32bitの環境で試した(refleshで肉眼確認)限りでは、
1000MS(1秒)では変化は細かいが若干間延びしてイライラする、10MSだと変化が速すぎてわかりずらい感じを受けるので
どういう手段をとるかは別として間隔は100MSで妥当な気はします。
ただし、マシンスペック、OSが32bitか64bitで見える印象は結構変わると思いますので、質問者さん自身で試して妥当な線を決めた方がいいと思います。

> また、Click イベントに長時間(数秒以上)の長い処理を行わせるのも避けましょう。
クリックイベントならそこまでクリティカルに考えなくてもよいような(あくまで主観ですが)
Form_Load、XX_Activateなど画面全体の描画に絡むイベントでは絶対やらない方がいいですね。
グリッドにデータ反映とかでも行数多すぎるとたまに描画に絡むエラーになったりしますからね。





編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[1]: rgbによるbackcolorの表示 /魔界の仮面弁士 →Re[3]: rgbによるbackcolorの表示 /魔界の仮面弁士
 
上記関連ツリー

rgbによるbackcolorの表示 / C#初心者 (19/10/08(Tue) 15:04) #92572
Re[1]: rgbによるbackcolorの表示 / 魔界の仮面弁士 (19/10/08(Tue) 15:40) #92573
│├ rgbによるbackcolorの表示 / 大谷刑部 (19/10/08(Tue) 16:35) #92577 ←Now
││└ Re[3]: rgbによるbackcolorの表示 / 魔界の仮面弁士 (19/10/08(Tue) 17:45) #92578
││  └ Re[4]: rgbによるbackcolorの表示 / 大谷刑部 (19/10/09(Wed) 09:35) #92584
│└ Re[2]: rgbによるbackcolorの表示 / C#初心者 (19/10/08(Tue) 16:24) #92575
Re[1]: rgbによるbackcolorの表示 / 大谷刑部 (19/10/08(Tue) 16:04) #92574
  ├ Re[2]: rgbによるbackcolorの表示 / C#初心者 (19/10/08(Tue) 16:25) #92576
  └ Re[2]: rgbによるbackcolorの表示 / まりもん (19/10/09(Wed) 10:00) #92586
    ├ Re[3]: rgbによるbackcolorの表示 / C#初心者 (19/10/09(Wed) 10:46) #92588 解決済み
    └ Re[3]: rgbによるbackcolorの表示 / 魔界の仮面弁士 (19/10/09(Wed) 12:04) #92593 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信