Обычно это происходит, когда вы выполняете интенсивные вычисления / итерации в том же потоке, где работают элементы пользовательского интерфейса. Чтобы обойти это, вам понадобится отдельный поток, выполняющий эту работу, и соответственно обновите значение метки. Я бы опубликовал полный исходный пример, но сейчас я не в сети.

я есть следующий код:

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" в конце также.

У кого-нибудь есть идеи?

Ответы на вопрос(5)

Ваш ответ на вопрос