程序是这样写的:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace doevent
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        private void Form1_Load(object sender, EventArgs e)
        {
        
        }        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i <=10000000; i++)
            {
                label1.Text = i.ToString();
            }
        }
    }
}
为什么我点击button1之后,然后我拖动那个窗口,就会无法响应,而且CPU占用100%,然后我加了一句Application.DoEvents(); 这样可以拖动了,但是CPU还是占了100%....不知道应该怎么做才能完美啊。

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace doevent
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
            
            }        private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0; i <=10000000; i++)
                {
                    label1.Text = i.ToString();
                    Application.DoEvents();
                }
            }
        }
    }
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;using System.Threading;namespace doevent
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
            
            }        private void button1_Click(object sender, EventArgs e)
            {
    Thread thr = new Thread(new ThreadStart(aaa));
    thr.Start();

            }private void aaa()
    {
                for (int i = 0; i <=10000000; i++)
                {
    Thread.Sleep(1);
                    label1.Text = i.ToString();
                }
    }

        }
    }
      

  3.   

    你是想让Label的值从0开始每过一秒就加1吧?
    这么写肯定不行
    用线程或者Timer吧
      

  4.   

    for (int i = 0; i <=10000000; i++)
    {
      label1.Text = i.ToString();
      Application.DoEvents();
      Thread.Sleep(10);

      

  5.   

    ThreadStart start = new ThreadStart(test);
    Thread t = new Thread(start);
    t.Start();private delegate void InvokeCallback(string msg);
    private void test()
    {
        for (int i = 0; i < 1000000; i++)
        {
            Thread.Sleep(1);
            if (this.label1.InvokeRequired)
            {
                InvokeCallback msgCallback = new InvokeCallback(msgEvent);
                label1.Invoke(msgCallback, new object[] { i.ToString() });
            }
            else
            {
                label1.Text = msg;
            }
        }
    }private void msgEvent(string msg)
    {
        label1.Text = msg;
    }
      

  6.   

            private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0; i <=10000000; i++)
                {
                    label1.Text = i.ToString();
                }
            }
    注意生命周期的问题!只要按下便开始循环,直到循环结束button1_Click函数才完成。当然程序会......
      

  7.   

    用Timer 
    因为 for 循环速度太快了,只有执行完了 
     最后显示1000000
      

  8.   

    for (int i = 0; i <=10000000; i++)
    {
      label1.Text = i.ToString();
      Application.DoEvents();
      Thread.Sleep(10);

    这个没错啊这个可以。但是为什么我没到10000000,关闭窗口时,进程不会马上停止,它还是一直在运行。
      

  9.   

    我拉了一个timer控件,那怎么做啊??
      

  10.   

    1楼就是我原先那样做的,CPU会占用100%。2楼有错啊拉了一个timer控件,我却不会弄啊
      

  11.   

        private int _Index = 0;
            private void Form1_Load(object sender, EventArgs e)
            {            timer1.Tick += new EventHandler(timer1_Tick);
                timer1.Interval = 1;
                timer1.Enabled = true;
            }        void timer1_Tick(object sender, EventArgs e)
            {
                label1.Text = _Index.ToString();
                _Index++;
            }
      

  12.   

    OK。用timer还是简单一点点了。。