Потоки на Winforms - PullRequest
       5

Потоки на Winforms

0 голосов
/ 19 сентября 2019

Я учу себя, как работать с большими числами в сложных циклах.В основной программе это вызов метода для выполнения какого-либо действия.В примере, над которым я работаю, просто отображается время в секундах.

Когда я работаю, форма переходит к «Не отвечает» и вылетает.Экран выглядит как

The Long Loop

Когда программа работает, на экран выводится каждая секунда, позволяющая пользователю увидеть, что программа все еще работает ине отвечает.

Код выглядит следующим образом:

private void BtnStart_Click(object sender, EventArgs e)
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();

    label1.Text = "Start";
    label2.Text = "Started";

    dataGridView1.ColumnCount = 1;
    dataGridView1.Columns[0].Name = "Number";

    for (int index1 = 0; index1 < limit; index1++)
    {
        for (int index2 = 0; index2 < limit; index2++)
        {
            for (int index3 = 0; index3 < limit; index3++)
            {
                if ((stopwatch.ElapsedMilliseconds % 1000) == 0)
                {
                    timeCount++;
                    AddRowToDG();
                }
                count++;
            }
        }
    }

    label1.Text = "The count is " + count.ToString();
    // Stop.
    stopwatch.Stop();
    Double myTime = stopwatch.ElapsedMilliseconds;
    label2.Text = (myTime / 1000).ToString();
}

private void AddRowToDG()
{
    dataGridView1.Rows.Add(timeCount.ToString());
}

Если я использую ограничение свыше 150, программа перестанет отвечать.В программировании, которое я фактически буду использовать, будет от 10 до степени 12.

Из проведенного мною исследования есть задачи и потоки, которые можно использовать.Какую методологию мне следует использовать и где я мог бы найти лучший ресурс, чтобы помочь мне сделать выбор в будущем?

1 Ответ

1 голос
/ 19 сентября 2019

C # язык имеет System.Threading.Tasks.Task и System.Threading.Thread классов, но для Windows Forms вы должны использовать System.ComponentModel.BackgroundWorker.Существует событие DoWork для выполнения логики вашего приложения в другом потоке.

...