我试图制作简单的强力算法。它工作正常。但我正在看这个视频
http://www.youtube.com/watch?v=v2xwficgRYk&feature=relmfu
(时间10:30)你可以在textbox2中找到可能性的变化。但是在我的程序中。我创建了1323作为密码然后当我点击暴力时我等了5秒钟,在textbox2中获得99999,在textbox3中获得1323.Why我不能在视频中看到textbox2中的数字流?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int a, b;
private void button1_Click(object sender, EventArgs e)
{
a = Convert.ToInt16(textBox1.Text);
}
private void button2_Click_1(object sender, EventArgs e)
{
for (int i = 0; i < 100000; i++)
{
textBox2.Text = "" + i;
if (a == i) textBox3.Text = "" + i;
}
}
}
答案 0 :(得分:4)
那是因为视频中的程序在一个单独的线程中运行暴力循环。
在你的程序中,循环在主线程中运行,因此只要它正在运行,就没有线程在观察消息泵所在的所有用户界面更新。
每当文本框的Text
属性发生更改时,消息队列中都会显示一条消息,需要重新绘制文本框以显示该值,但主线程正忙于运行循环并赢得在循环完成之前,我会对消息采取行动。
答案 1 :(得分:3)
在Windows窗体中,用户界面有一个单独的线程,后面代码中的所有代码也在这个线程上处理,所以当它运行for
循环时,它不会重新绘制屏幕。
您可以使用BackgroundWorker在单独的线程上进行处理,并允许用户界面线程将更改重新绘制到屏幕上。
关于代码示例的几点,您应该声明如下字段:
public partial class Form1 : Form
{
private int a;
private int b;
...
}
你也应该给他们更有意义的名字!
此外,您应该在int上使用.ToString()
方法,而不是将其与空字符串连接以获取文本值。
textBox2.Text = i.ToString();