暴力 - c#

时间:2012-10-16 20:36:56

标签: c# textbox brute-force

我试图制作简单的强力算法。它工作正常。但我正在看这个视频

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; 
        }
    }
}

2 个答案:

答案 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();