掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
背景を連続で変化させるには? (ID:86088)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>Threading.Thread.Sleep()なら、 多分これはAPIのSleep()でしょう。 Application.DoEvents()の方が宣言をしなくていいので 簡単かな。 >GUIに特化してる処理の最中には、あまりお勧めできませんが... 私もSleepはあまり好きでは有りません、外部の割り込みなんかも 全て受け付けなくなりますし。 とりあえずSleep()の前後にApplication.DoEvents()を入れれば、 メッセージ・キューに溜まった処理を全て吐き出しますので 問題は無いのかなと。 と言うか、「バグ」さんの書いたサンプルコードは、エラーが出ないのに なぜ色が変わらないのかと言う質問に対して、Windowsのメッセージに関する 多少の知識が必要なのかな。簡単に説明すると、 Windowsは時間のかかる描画等の処理は、他の処理が忙しい場合は描画処理を後回しにして とりあえずメッセージキューと言う場所に溜め込むわけです。そして処理が暇になった時 やおら、キューから順番に「処理」を取り出して実行するわけです。 ところががサンプルコードの様に、Do〜LoopでGUIの処理を回すと、Windowsは 処理を溜め込むのに忙しくて、実際に描画などの処理をする時間がなくなります。 実際は画面を変えようとLoopを回すのですが、描画をする時間が無いと言う矛盾に 遭遇するわけですね、そこでDoEventsを使用します。 DoEventsと言う命令は、メッセージキューに溜まっている処理を全て実行します。 この関数を適当に挿入することにより、適度な描画が可能になりま。 Sleepの間はWindowsは暇なのではと思うかもしれませんが、Sleepの間はそのスレッドは 処理を全て中断しますから、描画の処理もしません。「java.lang.Nullpo」さんが 「あまりお勧めできません」の理由もこの辺にあるのでしょう。 実際はかなり複雑なので、細部は違っているかもしれませんが、概念的な説明として。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.