我想实现的功能很简单,就是单击button时,窗体中有个label控件,让它循环显示1-10000。
代码如下:
public partial class Form9 : Form
    {
        public Form9()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            new Thread((ThreadStart)delegate()
            {
                for (int i = 0; i < 10000; i++)
                {
                    label1.Invoke((MethodInvoker)delegate()
                    {
                        label1.Text = i.ToString();
                    });
                }
            }).Start();
        }
    }
}问题是: 在vs中 ,点启动调试(F5),窗体有假死现象,label控件卡在那里,最后显示99999。
         但是直接到 bin\debug 目录下运行 应用程序, label快速依次地循环显示0-99999.窗体也没有假死。
这是什么原因,难道调试状态下和程序真实的运行环境不一样?

解决方案 »

  1.   


     private int MAX_COUNT = 10000;
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                new Thread((ThreadStart) delegate
                                             {
                                                 for(int i=0;i<MAX_COUNT;i++)
                                                 {                                                 label1.Invoke((MethodInvoker) delegate
                                                                                       {
                                                                                           label1.Text = i.ToString();
                                                                                       });
                                                 }
                                             }).Start();
            }
      

  2.   


                                              {
                                                 for(int i=0;i<MAX_COUNT;i++)
                                                 {                                                 label1.Invoke((MethodInvoker) delegate
                                                                                       {
                                                                                           label1.Text = i.ToString();
                                                                                       });
                                                     Thread.Sleep(5);
                                                 }
                                             }).Start();
      

  3.   

    http://www.cnblogs.com/smartls/archive/2011/04/08/2008981.html参考
      

  4.   

    楼主  我运行你的代码没有问题(调试状态 win7 vs2010)
      

  5.   

    你的方法确实可行(多了一句 Thread.Sleep(5)),问题是没加这句话,VS调试模式下和直接到debug目录下运行效果是不一样的。
      

  6.   

    我觉得跟你当时电脑运行的效能也有关系。CPU占用率,内存使用率等。你多测试几次看看?