程序是这样写的: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.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.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.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();
}
}
}
}
这么写肯定不行
用线程或者Timer吧
{
label1.Text = i.ToString();
Application.DoEvents();
Thread.Sleep(10);
}
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;
}
{
for (int i = 0; i <=10000000; i++)
{
label1.Text = i.ToString();
}
}
注意生命周期的问题!只要按下便开始循环,直到循环结束button1_Click函数才完成。当然程序会......
因为 for 循环速度太快了,只有执行完了
最后显示1000000
{
label1.Text = i.ToString();
Application.DoEvents();
Thread.Sleep(10);
}
这个没错啊这个可以。但是为什么我没到10000000,关闭窗口时,进程不会马上停止,它还是一直在运行。
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++;
}