C#标签文本未更新

| 我有以下代码:
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”。 谁有想法?     
已邀请:
您正在UI线程上执行冗长的操作。您应该将其移至后台线程(例如,通过
BackgroundWorker
),以便UI线程可以在需要时执行诸如重新绘制屏幕的操作。您可以作弊并执行
Application.DoEvents
,但我真的建议您反对。 这个问题和答案基本上就是您要问的: 在C#中执行任何其他操作时表格无响应     
使用Label.Refresh();这样可以节省很多时间。     
在您将UI线程返回到消息循环之前,Label不会重新绘制。尝试Label.Refresh,或者更好的方法是,按照其他海报的建议,将冗长的操作放在后台线程中。     
此操作在UI线程中执行。用户界面在完成之前不会更新。要在发送期间更新它,您必须在单独的线程中执行发送并从那里更新标签     
当您在与用户界面元素运行所在的线程相同的线程中进行大量计算/迭代时,通常会发生这种情况。要解决此问题,您将需要一个单独的线程来完成工作,然后从那里相应地更新标签的值。我已经发布了完整的源代码示例,但目前我还没有开发机器。     

要回复问题请先登录注册