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

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

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

PictureBoxのRefreshとInvalidate

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

■88304 / inTopicNo.1)  PictureBoxのRefreshとInvalidate
  
□投稿者/ バカボンド (17回)-(2018/08/18(Sat) 23:28:39)

分類:[.NET 全般] 

https://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html

上記サイトによると
PictureBoxのRefreshとInvalidateは両方とも
画面を更新するために使用されるそうです。
違いはRefreshはすぐさま更新なのに対し
Invalidateはすぐではないそうです。

それならすぐに更新してくれるRefleshの方が使い勝手が良いように思います。
しかし、多くのサイトではInvalidateを使うように書かれてあるものが多い気がします
Invalidateにはどのようなメリットがあるのでしょうか?

引用返信 編集キー/
■88305 / inTopicNo.2)  Re[1]: PictureBoxのRefreshとInvalidate
□投稿者/ Azulean (981回)-(2018/08/19(Sun) 00:06:11)
No88304 (バカボンド さん) に返信
> それならすぐに更新してくれるRefleshの方が使い勝手が良いように思います。
> しかし、多くのサイトではInvalidateを使うように書かれてあるものが多い気がします
> Invalidateにはどのようなメリットがあるのでしょうか?

Refresh はそれを呼び出したときに必ず再描画が呼び出されます。
Invalidate は次の描画のタイミングでお願いする(予約する)形になります。

たとえば、一瞬で3回、画像を生成した場合、ユーザーには最後の絵を見せるだけで良いかもしれません。
このとき、Refresh で処理してしまうと、前の2回も必ず描画しようとするため、無駄な処理コストになるか、一瞬しか表示されない絵が描画されることでちらついたように見えるなど、不利益になることがあります。
また、自分のアプリケーションで Paint イベントが予期せぬタイミング(処理途中)で呼び出されるなど、不利益につながることも多いです。
引用返信 編集キー/
■88306 / inTopicNo.3)  Re[2]: PictureBoxのRefreshとInvalidate
□投稿者/ バカボンド (18回)-(2018/08/19(Sun) 09:35:19)
ありがとうございます。
> また、自分のアプリケーションで Paint イベントが予期せぬタイミング(処理途中)で呼び出されるなど、不利益につながることも多いです。

というところだけよく分かりませんでした。
自分で呼び出す位置を指定しているので
再描画のタイミングを制御できるのではないのですか?

Invalidateの方がいつ再描画されるか分からないのですが
処理途中で呼び出される不利益が多いのではないかと思いました。
引用返信 編集キー/
■88309 / inTopicNo.4)  Re[3]: PictureBoxのRefreshとInvalidate
□投稿者/ Azulean (982回)-(2018/08/19(Sun) 21:21:40)
No88306 (バカボンド さん) に返信
> 自分で呼び出す位置を指定しているので
> 再描画のタイミングを制御できるのではないのですか?

あなたが制御できる範囲ではタイミングを調整できるかもしれません。
複雑なアプリケーションになってくると、様々なコントロール・クラスが入り組んでいる中で予期せぬタイミング(状態)で Paint イベントが発生するなど、制御が難しくなる一方です。
対して、多くのケースでは Refresh メソッドにそれほどのメリットがありません。

> Invalidateの方がいつ再描画されるか分からないのですが
> 処理途中で呼び出される不利益が多いのではないかと思いました。

何を主体に考えるかです。
Invalidate は Windows がそのウィンドウ(コントロール)を再描画するタイミングで処理して欲しいと予約するものです。
なので、ウィンドウの描画タイミングとしては適切なタイミングとなります。
引用返信 編集キー/
■88363 / inTopicNo.5)  Re[4]: PictureBoxのRefreshとInvalidate
□投稿者/ バカボンド (20回)-(2018/08/22(Wed) 22:50:13)
ありがとうございます。
納得しました。
引用返信 編集キー/
■88364 / inTopicNo.6)  Re[5]: PictureBoxのRefreshとInvalidate
□投稿者/ バカボンド (21回)-(2018/08/22(Wed) 22:50:20)
No88363 (バカボンド さん) に返信
> ありがとうございます。
> 納得しました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ