
C#でウィンドウズアプリケーションを作っています。
ある処理範囲内でRefreshやInvalidateが大量にあり、画面がちらついてしまいます。
このRefreshやInvalidateの処理を一時的に無効にすることはどのようにすれば良いのでしょうか?
アドバイスよろしくお願いします。
private void button1_Click(object sender, System.EventArgs e)
{
Console.WriteLine("何かの処理実行中・・・");
//ここから
for(int i=1; i<=1000; i++)
{
System.Threading.Thread.Sleep(1);
label1.Text=i.ToString();
this.Refresh();
this.Invalidate(true);
}
//ここまで のちらつきを防止したい
//(実際の処理は単純なループではない)
label1.Text="end";
Console.WriteLine("引き続き何かの処理実行中・・・");
}
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
前に回答したものです。
処理中に描画されないから前のような質問があったのだと思います。
当方C#はほとんど知りませんが
this.Refresh();
this.Invalidate(true);
ではなく
Application.DoEvents();ではどうでしょう?
あるいは別の方法としてbutton1_Click内の処理を別スレッドでたちあげてはどうでしょう?
private void button1_Click(object sender, System.EventArgs e)
{
button1.Enabled = false;
System.Threading.Thread MyThread = new System.Threading.Thread( new System.Threading.ThreadStart(fnc));
MyThread.Start() ;
}
private void fnc()
{
for(int i=1; i<=1000; i++)
{
System.Threading.Thread.Sleep(1);
label1.Text=i.ToString();
}
button1.Enabled = true;
}
※ちなみに私の環境で
this.Refresh();
this.Invalidate(true);
としたところ特に気がつくほどのちらつきは発生しませんでした。
WinAPIのInvalidateRectでは第3引数をFALSEとすることで
消去をしなくなるのでちらつきがなくなります。
No.1
- 回答日時:
「一時的に無効にする」というか、そもそも最初から Refresh しなきゃ良いんじゃないの?
(というか、Refresh() は Invalidate(true) を含んでいるから Refresh() した後に Invalidate(true) するのは全く無駄だと思うんだけど。)
参考URL:http://dobon.net/vb/dotnet/control/refreshupdate …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CloseとDisposeの違い
Visual Basic(VBA)
-
C#で動的にコントロールを取得するにはどのようにしたらよいのでしょうか
C言語・C++・C#
-
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
-
4
C#でButtonのフォーカス枠を消したいのですが
C言語・C++・C#
-
5
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
6
C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
-
7
画面を強制的に再描画させる方法
C言語・C++・C#
-
8
コンボボックスでドロップダウンリストにしたときに・・・・
Visual Basic(VBA)
-
9
コンボボックスの開いたリストを閉じるには
Access(アクセス)
-
10
DataGridView 列ごとの入力制限
Visual Basic(VBA)
-
11
DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
12
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
13
意味不明の実行時エラーで困っています
その他(プログラミング・Web制作)
-
14
DoEventsがやはり分からない
Visual Basic(VBA)
-
15
C#でSendInputを使ったサンプルを動かそうとしているのですが、よくわかりません
C言語・C++・C#
-
16
C# DataTableの行をソートしてDataGridViewに反映させたい
C言語・C++・C#
-
17
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
18
Groupboxの配下のコントロール名を確認したい(その逆も有り)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
UMLでの例外処理
-
メルカリのメルカードで買い物...
-
取り消し線が入った文字を削除...
-
VBAでCOPYを繰り返すと、処理が...
-
インタラクティブの反対語は?
-
VBAでループ内で使う変数名を可...
-
EXCEL VBA マクロ 実行する度に...
-
DoEventsがやはり分からない
-
パソコンについて GPUをCPUの代...
-
汎用機(ACOS)におけるJCLの記...
-
vba 空のデータをSplitする時の...
-
変数が""(空文字)かどうか判別...
-
【Excel】特定の文字を含むセル...
-
お家デートをしててハグを長い...
-
switch の範囲指定
-
条件付きコンパイル: #IF 1 Th...
-
JDBCでの大量データ検索でResul...
-
Do Until rs1.EOF であるレコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
VBAでループ内で使う変数名を可...
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
銀行の窓口処理の件で知ってる...
-
VBAでCOPYを繰り返すと、処理が...
-
月度は何て読みますか?
-
インタラクティブの反対語は?
-
VB.NET DataGridViewでIsNewRo...
-
DoEventsがやはり分からない
-
VBの質問#if 0 then ってどう...
-
お家デートをしててハグを長い...
-
セックスレスの既婚女性は自慰...
-
VB.NET Excelを読み込んでDataT...
-
リョウ・・・量?料?
-
メルカリのメルカードで買い物...
-
Loadイベント中にほかのイベン...
おすすめ情報