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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Excel(エクセル) エクセル VBA実行中のApplication.ScreenUpdatingについて 3 2023/07/13 21:06
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Excel(エクセル) エクセルVBA マクロ処理中のポップアップメッセージについて 1 2023/08/04 21:34
- Excel(エクセル) ネットワーク上のエクセルとリンクしている時にデータ更新をvbaで、refresh Allで行う場合の 2 2023/04/10 05:39
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
このQ&Aを見た人はこんなQ&Aも見ています
-


C#でButtonのフォーカス枠を消したいのですが
C言語・C++・C#
-


C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
-


画面を強制的に再描画させる方法
C言語・C++・C#
-
-
4

CloseとDisposeの違い
Visual Basic(VBA)
-
5

別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
6

C# ユーザコントロール内のボタン押下を親で知る
その他(プログラミング・Web制作)
-
7

Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
8

C# ReadOnlyのTextBoxで
C言語・C++・C#
-
9

コンボボックスの開いたリストを閉じるには
Access(アクセス)
-
10

ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
11

C#で親にイベントを投げる方法
C言語・C++・C#
-
12

DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
13

継承したクラス側のクラス名の取得
その他(プログラミング・Web制作)
-
14

意味不明の実行時エラーで困っています
その他(プログラミング・Web制作)
-
15

SuspendLayoutが効かない?
Visual Basic(VBA)
-
16

C#で動的にコントロールを取得するにはどのようにしたらよいのでしょうか
C言語・C++・C#
-
17

C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
18

C#でSendInputを使ったサンプルを動かそうとしているのですが、よくわかりません
C言語・C++・C#
-
19

DoEventsがやはり分からない
Visual Basic(VBA)
-
20

C# Controls.Addで動的に配置したコントロールのRemoveについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
UMLでの例外処理
-
EXCEL VBA マクロ 実行する度に...
-
VBAでループ内で使う変数名を可...
-
VBAでCOPYを繰り返すと、処理が...
-
インタラクティブの反対語は?
-
【Excel】特定の文字を含むセル...
-
月度は何て読みますか?
-
リョウ・・・量?料?
-
switch の範囲指定
-
VBの質問#if 0 then ってどう...
-
お家デートをしててハグを長い...
-
C言語 b += a ? 1 : 0; の意味
-
生活保護受給者は性欲をどんな...
-
FFTの結果ついて
-
再帰処理を途中で抜けるには
-
ボタンクリックイベント 重複...
-
Loadイベント中にほかのイベン...
-
VB.NET Excelを読み込んでDataT...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
DoEventsがやはり分からない
-
月度は何て読みますか?
-
お家デートをしててハグを長い...
-
VB.NET Excelを読み込んでDataT...
-
VBの質問#if 0 then ってどう...
-
Do~Loopした回数をカウントしたい
-
VBAでCOPYを繰り返すと、処理が...
-
メルカリのメルカードで買い物...
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
リョウ・・・量?料?
-
vba 空のデータをSplitする時の...
-
findは動くがfindnextがマクロ...
おすすめ情報









