Обычно это происходит, когда вы выполняете интенсивные вычисления / итерации в том же потоке, где работают элементы пользовательского интерфейса. Чтобы обойти это, вам понадобится отдельный поток, выполняющий эту работу, и соответственно обновите значение метки. Я бы опубликовал полный исходный пример, но сейчас я не в сети.
я есть следующий код:
private void button1_Click(object sender, EventArgs e)
{
var answer =
MessageBox.Show(
"Do you wish to submit checked items to the ACH bank? \r\n\r\nOnly the items that are checked and have the status 'Entered' will be submitted.",
"Submit",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);
if (answer != DialogResult.Yes)
return;
button1.Enabled = false;
progressBar1.Maximum = dataGridView1.Rows.Count;
progressBar1.Minimum = 0;
progressBar1.Value = 0;
progressBar1.Step = 1;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if ((string) row.Cells["Status"].Value == "Entered")
{
progressBar1.PerformStep();
label_Message.Text = @"Sending " + row.Cells["Name"].Value + @" for $" + row.Cells["CheckAmount"].Value + @" to the bank.";
Thread.Sleep(2000);
}
}
label_Message.Text = @"Complete.";
button1.Enabled = true;
}
Это тест, который я создаю для переноса на мое приложение. Все работает нормально, но установлен label_Message.text. Это никогда не появляется на экране. Это устанавливается, я сделал console.write на нем, чтобы проверить. Это просто не обновляет экран. Я получаю "Complete" в конце также.
У кого-нибудь есть идеи?