Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы 1 и 2 на С#.docx
Скачиваний:
165
Добавлен:
11.04.2015
Размер:
253.02 Кб
Скачать

Чтобы проверить проект, выполните следующие действия.

  1. В меню Отладка выберите команду Начать отладку.

Приложение начнет работу и появится форма frmCalculations.

  1. В текстовом поле введите 4, а затем нажмите кнопку с надписью Прибавить два.

Под кнопкой должна появиться цифра "6", а в метке lblTotalCalculations должен быть отображен текст "Всего вычислений — 1".

  1. Теперь нажмите кнопку с надписью Факториал - 1.

Под кнопкой должна появиться цифра 6, а метка lblTotalCalculations теперь содержит текст "Всего вычислений — 4".

  1. Измените значение текстового поля на 20, а затем нажмите кнопку с надписью Факториал.

Под кнопкой должно появиться число "2.43290200817664E+18", а метка lblTotalCalculations теперь содержит текст "Всего вычислений — 24".

  1. Измените значение текстового поля на 50000, а затем нажмите кнопку с надписью Выполнить цикл.

Заметьте, что перед тем, как кнопка вновь станет доступна, пройдет небольшой, но заметный интервал времени. В метке под кнопкой должно отображаться "50000", а общее количество вычислений теперь равно 25000024.

  1. Измените значение текстового поля на 50000, нажмите кнопку с надписью Выполнить цикл и непосредственно после этого нажмите кнопку Добавить два. Нажмите кнопку еще раз.

Кнопка не будет реагировать (так же как и все остальные элементы управления в форме), пока не завершится цикл.

Если в программе запускается только один поток выполнения, занимающие процессор вычисления (аналогичные приведенным выше) могут приостанавливать программу, пока они не будут закончены. В следующем разделе приложение будет дополнено поддержкой многопоточности, в результате чего несколько потоков смогут выполняться одновременно.

Добавление поддержки многопоточности

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

Чтобы добавить подпрограмму "Threads", выполните следующие действия.

  1. Откройте файл Calculator.cs в Редакторе кода.

  2. В начале кода найдите объявление класса и сразу после знака { введите следующий код.

// Declares the variables you will use to hold your thread objects.

public System.Threading.Thread FactorialThread;

public System.Threading.Thread FactorialMinusOneThread;

public System.Threading.Thread AddTwoThread;

public System.Threading.Thread LoopThread;

  1. Непосредственно перед концом объявления класса в нижней части кода добавьте следующий метод.

public void ChooseThreads(int threadNumber)

{

// Determines which thread to start based on the value it receives.

switch(threadNumber)

{

case 1:

// Sets the thread using the AddressOf the subroutine where

// the thread will start.

FactorialThread = new System.Threading.Thread(new

System.Threading.ThreadStart(this.Factorial));

// Starts the thread.

FactorialThread.Start();

break;

case 2:

FactorialMinusOneThread = new

System.Threading.Thread(new

System.Threading.ThreadStart(this.FactorialMinusOne));

FactorialMinusOneThread.Start();

break;

case 3:

AddTwoThread = new System.Threading.Thread(new

System.Threading.ThreadStart(this.AddTwo));

AddTwoThread.Start();

break;

case 4:

LoopThread = new System.Threading.Thread(new

System.Threading.ThreadStart(this.RunALoop));

LoopThread.Start();

break;

}

}

Когда будет создан экземпляр объекта Thread, ему потребуется аргумент в виде объекта ThreadStart. Объект ThreadStart — это делегат, указывающий на адрес метода, в котором начинается поток. Объект ThreadStart не может принимать параметры или передавать значения, и поэтому он может определять только метод void. Реализованный здесь метод ChooseThreads будет получать значение из вызывающей его программы и использовать это значение для определения запускаемого потока.