progs.biz  
Начало>C#>Windows>Урок 6
C#
VB.NET
Visual C++.NET
Visual C++ 6
WinAPI
C++
Delphi
C++ Builder
Java
PHP
Visual Basic 6.0
DirectX
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Разработка Windows-приложений на Visual Basic.NET и Visual C#.NET. Учебный курс MCAD/MCSD.
 Разработка Windows-приложений на Visual Basic.NET и Visual C#.NET. Учебный курс MCAD/MCSD.
Заказать на Озоне


SpyLOG
Яндекс-цитирования

C# для Windows
Урок 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:

Работа разных потоков
Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX new!
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz
Label

 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2004 сайт progs.biz
© 2002-2004 Алексеев Игорь