读书人

【winform】小弟我想点击button1让Lab

发布时间: 2012-01-21 21:31:43 作者: rapoo

【winform】我想点击button1让Label上显示从0,1,2,3,……,10000000
程序是这样写的:

C# code
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%....

不知道应该怎么做才能完美啊。。。。

[解决办法]
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();
}
}
}
}


[解决办法]
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();
}
}
}
}

[解决办法]
你是想让Label的值从0开始每过一秒就加1吧?
这么写肯定不行
用线程或者Timer吧
[解决办法]
你可以考虑时间控件来做~~
[解决办法]
C# code
for (int i = 0; i <=10000000; i++){  label1.Text = i.ToString();  Application.DoEvents();  Thread.Sleep(10);}
[解决办法]
探讨
C# codefor (int i = 0; i <=10000000; i++)
{
label1.Text = i.ToString();
Application.DoEvents();
Thread.Sleep(10);
}

[解决办法]
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;
}
[解决办法]
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <=10000000; i++)
{
label1.Text = i.ToString();
}
}


注意生命周期的问题!只要按下便开始循环,直到循环结束button1_Click函数才完成。当然程序会......
[解决办法]
用Timer
因为 for 循环速度太快了,只有执行完了
最后显示1000000

[解决办法]
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++;
}

读书人网 >C#

热点推荐