Создание потока с помощью Visual C#

Многопоточные приложения можно создавать в Microsoft Visual C# .NET или в Visual C#. В этой статье описывается, как простое приложение Visual C# может создавать потоки и управлять ими.

Исходная версия продукта: Visual C#
Исходный номер базы знаний: 815804

Требования

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

  • Windows или Windows Server
  • Visual C# .NET или Visual C#

В этой статье предполагается, что вы знакомы со следующими разделами:

  • Программирование на Visual C#
  • Интегрированная среда разработки (IDE) Visual Studio .NET или интегрированная среда разработки Visual Studio

В этой статье описывается пространство System.Threadingимен библиотеки классов платформа .NET Framework .

Создание приложения Visual C# с потоками

  1. Запустите Visual Studio .NET, Visual Studio или Visual C# Express Edition.

  2. Создайте проект приложения Windows Visual C# с именем ThreadWinApp.

  3. Добавьте в форму элемент управления Кнопка. По умолчанию кнопка называется Button1.

  4. Добавьте компонент ProgressBar в форму. По умолчанию индикатор выполнения называется ProgressBar1.

  5. Щелкните форму правой кнопкой мыши и выберите пункт Просмотреть код.

  6. Добавьте следующую инструкцию в начало файла:

    using System.Threading;
    
  7. Добавьте следующий button1_Click обработчик событий для Button1:

    private void button1_Click(object sender, System.EventArgs e)
    {
        MessageBox.Show("This is the main thread");
    }
    
  8. Добавьте в класс следующую переменную Form1 :

    private Thread trd;
    
  9. Добавьте приведенный ниже метод в класс Form1:

    private void ThreadTask ()
    {
        int stp;
        int newval;
        Random rnd = new Random ();
    
        while (true)
        {
            stp = this.progressBar1.Step * rnd.Next (-1, 2);
            newval = this.progressBar1.Value + stp;
            if (newval > this.progressBar1.Maximum)
                newval = this.progressBar1.Maximum;
            else if (newval < this.progressBar1.Minimum)
                newval = this.progressBar1.Minimum;
            this.progressBar1.Value = newval;
            Thread.Sleep (100);
        }
    }
    

    Примечание.

    Это код, лежащий в основе потока. Этот код представляет собой бесконечный цикл, который случайным образом увеличивает или уменьшает значение в ProgressBar1, а затем ожидает 100 миллисекунда, прежде чем оно продолжится.

  10. Добавьте следующий Form1_Load обработчик событий для Form1. Этот код создает новый поток, делает поток фоновым, а затем запускает поток.

    private void Form1_Load(object sender, System.EventArgs e)
    {
        Thread trd = new Thread(new ThreadStart(this.ThreadTask));
        trd.IsBackground = true;
        trd.Start();
    }
    

Убедитесь, что он работает

  1. Выполните сборку и запуск приложения. Обратите внимание, что значение в ProgressBar1 изменяется случайным образом. Это новый поток в операции.

  2. Чтобы продемонстрировать, что поток main не зависит от потока, который изменяет значение ProgressBar1, нажмите кнопку на форме. Появится диалоговое окно со следующим сообщением об ошибке:

    Это поток main

Дождитесь ввода. Обратите внимание, что значение в ProgressBar1выменяется.

Устранение неполадок

В более сложных приложениях убедитесь, что вы синхронизируете несколько потоков при доступе к общим переменным. Дополнительные сведения см. в инструкции блокировки и в других разделах в справочной документации по Visual C# в Интернете.

Ссылки

Дополнительные сведения см. в разделе Класс thread.