У меня есть рабочий фонарик с длительной работой. Задача проходит через список файлов, и я хочу обновить пользователя, с каким файлом мы находимся. У меня есть полоска инструмента с надписью panel1.text. Индикатор выполнения работает, однако метка не изменяется в моем методе ProgressChanged, то есть он должен сказать, что обработчик File1 затем изменится на Обработку File2, но он остается на умолчанию по умолчанию.Progress Bar с ярлыком - не удалось обновить ярлык в 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)' в основном не позволяет вашему потоку пользовательского интерфейса обрабатывать сообщения с краской (и не только). –
Да - текст ярлыка не меняется. Похоже, я должен обновить метку в цикле. – Missy