長時間実行しているバックグラウンドワーカーがいます。タスクはファイルのリストを通過し、私は私たちがいるファイルを使用してユーザーを更新したい。私はpanel1.textという名前のラベルを持つツールストリップを持っています。プログレスバーは機能していますが、ラベルはProgressChangedメソッドで変更されていません。つまり、File1の処理が処理され、File2の処理に変更されますが、Processingのデフォルトにとどまります。ラベル付きプログレスバー - ProgressChangedでラベルを更新できません
private void btnProcess_Click(object sender, EventArgs e)
{
toolStripProgressBar1.Visible = true;
toolStripProgressBar1.Maximum = 1000000000;
panel1.Text = "Processing "; // this appears properly
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(processFiles);
worker.ProgressChanged += ProgressChanged;
worker.RunWorkerAsync();
while (worker.IsBusy)
{
// the reason for this is because nothing can happen until the processing is done
toolStripProgressBar1.Increment(1);
}
// more processing
}
private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
panel1.Text = "Processing "+ e.UserState.ToString(); <<<---- This is Not Updating panel1.Text but it evaluates properly
}
private void processFiles(object sender, EventArgs e)
{
int retVal = 0;
foreach (string fileName in listBox1.Items)
{
ProgressChangedEventArgs ea = new ProgressChangedEventArgs(1,fileName);
ProgressChanged(this, ea);
// do more processing
}
}
私は助けていただきありがとうございます。
更新しないという意味ですか?ラベルのテキストが変更されていないか、または何ですか? – Rahul
'while(worker.IsBusy) 'ループは、基本的にUIスレッドがペイント(そして、それだけでなく)メッセージを処理するのを防ぎます。 –
はい - ラベルテキストは変更されません。ループ内のラベルを更新する必要があるようです。 – Missy