Груба сила - c#

Опитах се да направя прост алгоритъм за груба сила. Работи нормално. Но гледах това видео

http://www.youtube.com/watch?v=v2xwficgRYk&feature=relmfu

(време 10:30), както можете да видите в textbox2 възможностите се променят. Но в моята програма. Създавам 1323 като парола и след това, когато щракна brute, изчаках 5 секунди и получавам 99999 в textbox2 и 1323 в textbox3. Защо не мога да видя потокът от числа в текстово поле 2 като на видео?

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

person allstar    schedule 16.10.2012    source източник
comment
Уау, това е странно място за деклариране на полета за екземпляри...   -  person Jon Skeet    schedule 17.10.2012
comment
Трябва да обновявате текста в текстовото поле всеки път, когато го променяте, в противен случай няма да се показва. но не съм сигурен как се прави това   -  person Nabou    schedule 17.10.2012
comment
Това всъщност няма много общо с грубата сила, за разлика от правилното обработване на актуализирането на потребителския интерфейс.   -  person myermian    schedule 17.10.2012


Отговори (2)


Това е така, защото програмата във видеото изпълнява цикъла на груба сила в отделна нишка.

Във вашата програма цикълът се изпълнява в главната нишка, така че докато работи, няма нишка, която да наблюдава изпомпването на съобщенията, където се случват всички актуализации на потребителския интерфейс.

Всеки път, когато свойството Text на текстовото поле се промени, в опашката за съобщения се изпуска съобщение, че текстовото поле трябва да бъде преначертано, за да покаже стойността, но основната нишка е заета с изпълнението на цикъла и няма да предприеме действия по съобщенията, докато цикълът е направен.

person Guffa    schedule 16.10.2012

В windows forms има една нишка за потребителския интерфейс и целият код в кода отзад също се обработва в тази нишка, така че докато изпълнява вашия for цикъл, той не преначертава промените на екрана.

Начинът, по който можете да заобиколите това, е да използвате BackgroundWorker за извършване на обработката в отделна нишка и позволяване на нишката на потребителския интерфейс да преначертае промените на екрана.

Няколко точки относно вашия примерен код, трябва да декларирате полетата си така:

public partial class Form1 : Form
{
    private int a;
    private int b;

    ...
}

Трябва също да им дадете по-смислени имена!

Освен това трябва да използвате метода .ToString() на int, вместо да го свързвате с празен низ, за ​​да получите текстовата стойност.

textBox2.Text = i.ToString();
person Trevor Pilley    schedule 16.10.2012