日期:2014-05-17  浏览次数:20731 次

关于C#控件显示的问题
背景:点击一个按钮执行耗时操作之前,我想要显示一个picturebox,里面有加载了一张动态图片,这样就相当于一个loading界面,然后再结束耗时操作的时候将控件隐藏。
代码如下:
private void test_Click(object sender, EventArgs e)
{
      picturebox1.Visible = true;
      // 这里执行耗时操作,用循环来替代
      for (int i = 0; i < 100; i++ )
      {
          for (int j = 0; j < 100; j++ )
          {
              for (int k = 0; k < 10000; k++ )
              {
                  int[] arrayll = new int[100];
              }
          }
      }
      MessageBox.Show("Finished!!!");
}

问题:
当执行到picturebox1.visible = true时,控件不显示。要一直到循环结束,执行到MessageBox.Show("Finished!!!");时,控件才显示。
这是为什么?有什么办法可以解决?

------解决方案--------------------
picturebox1.Visible = true;
picturebox1.Update();
------解决方案--------------------
卡住是没办法的,因为他们都是在主线程中运行。
一般的做法是耗时的操作另开线程运行,运行完成后如果需要更新界面,通过委托更新界面。