
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
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
5
C# ユーザコントロール内のボタン押下を親で知る
その他(プログラミング・Web制作)
-
6
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
7
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
8
C#で親にイベントを投げる方法
C言語・C++・C#
-
9
System.IO.Directory.GetFilesの順番
Visual Basic(VBA)
-
10
コンボボックスの開いたリストを閉じるには
Access(アクセス)
-
11
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
12
DataGridViewの各セル幅を自由に決め、その幅で固定したい
Visual Basic(VBA)
-
13
DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
14
継承したクラス側のクラス名の取得
その他(プログラミング・Web制作)
-
15
CloseとDisposeの違い
Visual Basic(VBA)
-
16
CellEnterイベント仕様について
Visual Basic(VBA)
-
17
SuspendLayoutが効かない?
Visual Basic(VBA)
-
18
DateTimePickerでに年月までしか選択できないようにしたいです。
Visual Basic(VBA)
-
19
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
20
C#でSendInputを使ったサンプルを動かそうとしているのですが、よくわかりません
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
VBAでループ内で使う変数名を可...
-
UMLでの例外処理
-
DoEventsがやはり分からない
-
フォーム上のすべてのTextBoxを...
-
月度は何て読みますか?
-
EXCEL VBA マクロ 実行する度に...
-
VBの質問#if 0 then ってどう...
-
VB.NET Excelを読み込んでDataT...
-
取り消し線が入った文字を削除...
-
VBAでCOPYを繰り返すと、処理が...
-
リョウ・・・量?料?
-
findは動くがfindnextがマクロ...
-
RPGプログラムの*HIVALについて
-
COBOLのEVALUATE文について
-
EXCEL2003 VBAで2つのDBに接続...
-
VBAでセルに値が入力されるまで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
VBAでループ内で使う変数名を可...
-
メルカリのメルカードで買い物...
-
月度は何て読みますか?
-
UMLでの例外処理
-
EXCEL VBA マクロ 実行する度に...
-
セックスレスの既婚女性は自慰...
-
switch の範囲指定
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
Do~Loopした回数をカウントしたい
-
VBの質問#if 0 then ってどう...
-
DoEventsがやはり分からない
-
お家デートをしててハグを長い...
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
生活保護受給者は性欲をどんな...
-
iD
おすすめ情報