- PR -

C# Form上のコントロールで途中経過を乱れなく表示させたい

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-01-27 10:58
Windows.Form上のラベルで実行の途中経過を逐次表示させたいが、
下記のような問題が発生する。単純にUpdate()を実行するだけでは
不十分なのでしょうか?Reflesh()やUpdate()の正しい使い方がきちんと
理解できていません。解決方法をアドバイス願います。

<例題>

現在の実行経過、つまり「XXXまで実行中」という表示を
リアルタイムに乱れなく表示させたい

外乱(Formをドラッグする等)が入ると、それ以降の更新が行われず、
外乱が入った時点の表示のまま処理が進行してしまう。
例えば、i=1324の時点で外乱が入るとそれ以降ループが完了するまで、
「1324まで実行中」の表示のまま表示が停止してしまう。
そして、ループが完了した時点に「9999まで実行中」という具合に表示が更新される。
これでは、処理の進行状況を正確にモニターすることができない。

private void button1_Click(object sender, System.EventArgs e)
{
for(int i = 0;i < 10000;i++)
{
//
// ここに処理したいロジックが挿入される
//

// 実行経過の表示
label1.Text = String.Format("{0}まで実行中",i);
label1.Update();
}
}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-27 11:02
引用:

ひろしさんの書き込み (2006-01-27 10:58) より:

外乱(Formをドラッグする等)が入ると、


これは、Refresh などではダメでしょう。
Application.DoEvents メソッドでメッセージを吐かせる必要がありますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-01-27 15:47
解決できました。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)