Урок 6. Создание потока

Что такое отдельный поток? В первом приближении это некоторая отдельная часть программы, которая может выполняться параллельно с другими частями программы. Ключевое слово тут - параллельно. Т. е. в одном своем потоке программа может делать некоторое длительное действие, а в другом потоке - другое, и эти действия будут выполняться параллельно.

Классический пример использования потоков можно найти в программе Word - тут в одном потоке может происходить фоновая проверка орфографии, в другом - печать текста пользователем, в третьем - сохранение файла на жесткий диск.

Для использования потоков в программе мы используем пространство имен System.Threading. Простейший поток - это экземпляр класса Thread из этого пространства имен.

Рассмотрим пример использования потоков в Windows-приложении. Создайте обычное Windows-приложение на C#. Разместите на форме две кнопки, заголовки на которых поменяйте на Start Thread и MsgBox соответственно. По первой кнопке мы запустим поток, в котором бы будем выполнять некоторое продолжительное действие (оно будет длиться несколько секунд). По второй кнопке мы будем выполнять некоторое параллельное действие (там мы просто вызовем обычный MessageBox).

Вот что вы должны добавить в текст программы (т. е. в класс формы):

...

using System.Threading; // Добавляем нужное пространство имен.

...

// Первый поток.

public Thread thr1;

// Вызываемая в потоке функция.

void f1()

{

// Запуск длинной операции.

for(int i=0; i<3000; i++)

{

// Результаты показываем в заголовке окна.

Text = i.ToString();

}

}

private void button1_Click(object sender, System.EventArgs e)

{

// Создание нового потока.

thr1 = new Thread(new ThreadStart(f1));

// Запуск нового потока.

thr1.Start();

}

private void button2_Click(object sender, System.EventArgs e)

{

// Некоторое параллельное действие.

MessageBox.Show("Some Action");

}

...

Наш поток создается в обработчике щелчка по первой кнопке. Обратите внимание, что при вызове конструктора мы указываем, что за метод будет выполняться в нашем потоке (а именно метод с именем f1):

...

thr1 = new Thread(new ThreadStart(f1));

...

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

Запускаем программу. При нажатии на первую кнопку запустится функция f1 в отдельном потоке. В заголовке окна замелькают последовательные числа. И, что самое важное, на вторую кнопку тоже можно будет нажимать до окончания работы обработчика первой кнопки - при этом появится соответствующий MessageBox:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: