Использование потоков и работа с потокамиUsing threads and threading

С помощью языка .NET можно создавать приложения, которые выполняют несколько операций одновременно.With .NET, you can write applications that perform multiple operations at the same time. Операции, которые потенциально могут задержать выполнение других операций, выполняются в отдельных потоках; такой способ организации работы приложения называется многопоточностью или свободным созданием потоков.Operations with the potential of holding up other operations can execute on separate threads, a process known as multithreading or free threading.

Приложения, использующие многопоточность, более оперативно реагируют на действия пользователя, поскольку пользовательский интерфейс остается активным, в то время как задачи, требующие интенсивной работы процессора, выполняются в других потоках.Applications that use multithreading are more responsive to user input because the user interface stays active as processor-intensive tasks execute on separate threads. Многопоточность также эффективна при создании масштабируемых приложений, поскольку пользователь может добавлять потоки при увеличении рабочей нагрузки.Multithreading is also useful when you create scalable applications, because you can add threads as the workload increases.

Примечание

Если требуется больший контроль над поведением потоков приложения, можно управлять потоками самостоятельно.If you need more control over the behavior of the application's threads, you can manage the threads yourself. Но начиная с .NET Framework 4 многопоточное программирование значительно упростилось благодаря классам System.Threading.Tasks.Parallel и System.Threading.Tasks.Task, Parallel LINQ (PLINQ), новым классам параллельных коллекций из пространства имен System.Collections.Concurrent и новой модели программирования, которая вместо потоков использует концепцию задач.However, starting with the .NET Framework 4, multithreaded programming is greatly simplified with the System.Threading.Tasks.Parallel and System.Threading.Tasks.Task classes, Parallel LINQ (PLINQ), new concurrent collection classes in the System.Collections.Concurrent namespace, and a new programming model that is based on the concept of tasks rather than threads. Дополнительные сведения см. в статье Параллельное программирование в .NET и Библиотека параллельных задач (TPL).For more information, see Parallel Programming and Task Parallel Library (TPL).

Практическое руководство. Создание и запуск нового потокаHow to: Create and start a new thread

Чтобы создать поток, создайте новый экземпляр класса System.Threading.Thread и укажите в конструкторе имя метода, который должен выполняться в новом потоке.You create a new thread by creating a new instance of the System.Threading.Thread class and providing the name of the method that you want to execute on a new thread to the constructor. Чтобы запустить созданный поток, вызовите метод Thread.Start.To start a created thread, call the Thread.Start method. Дополнительные сведения и примеры см. в статье Создание потоков и передача данных во время запуска и справочнике по API Thread.For more information and examples, see the Creating threads and passing data at start time article and the Thread API reference.

Практическое руководство. Остановка потокаHow to: Stop a thread

Чтобы прервать выполнение потока, используйте метод Thread.Abort.To terminate the execution of a thread, use the Thread.Abort method. Этот метод вызывает ThreadAbortException в потоке, для которого был вызван.That method raises a ThreadAbortException on the thread on which it's invoked. Дополнительные сведения см. в разделе Уничтожение потоков.For more information, see Destroying threads.

Начиная с .NET Framework 4 вы можете использовать System.Threading.CancellationToken для совместной отмены потока.Beginning with the .NET Framework 4, you can use the System.Threading.CancellationToken to cancel a thread cooperatively. Подробные сведения см. в статье Отмена в управляемых потоках.For more information, see Cancellation in managed threads.

Используйте метод Thread.Join, чтобы вызывающий поток ждал завершения потока, для которого был вызван метод.Use the Thread.Join method to make the calling thread wait for the termination of the thread on which the method is invoked.

Практическое руководство. Приостановка или прерывание потокаHow to: Pause or interrupt a thread

Используйте метод Thread.Sleep, чтобы приостановить текущий поток на определенное время.You use the Thread.Sleep method to pause the current thread for a specified amount of time. Заблокированный поток можно прервать путем вызова метода Thread.Interrupt.You can interrupt a blocked thread by calling the Thread.Interrupt method. Дополнительные сведения см. в разделе Приостановка и прерывание потоков.For more information, see Pausing and interrupting threads.

Свойства потокаThread properties

В приведенной ниже таблице показаны некоторые свойства Thread.The following table presents some of the Thread properties:

Свойство.Property ОписаниеDescription
IsAlive Возвращает true, если поток был запущен и не был завершен нормально либо был прерван.Returns true if a thread has been started and has not yet terminated normally or aborted.
IsBackground Возвращает или задает логическое значение, которое указывает, является ли поток фоновым потоком.Gets or sets a Boolean that indicates if a thread is a background thread. Фоновые потоки отличаются от основных потоков лишь тем, что они не влияют на завершение процесса.Background threads are like foreground threads, but a background thread doesn't prevent a process from stopping. Когда обработка всех основных потоков закончена, общеязыковая среда выполнения завершает процесс, применяя метод Abort к тем фоновым потокам, которые еще продолжают существовать.Once all foreground threads that belong to a process have stopped, the common language runtime ends the process by calling the Abort method on background threads that are still alive. См. дополнительные сведения об основных и фоновых потоках.For more information, see Foreground and Background Threads.
Name Возвращает или задает имя потока.Gets or sets the name of a thread. Наиболее часто используется для обнаружения отдельных потоков при отладке.Most frequently used to discover individual threads when you debug.
Priority Возвращает или задает значение ThreadPriority, которое используется операционной системой для установки приоритетов потоков.Gets or sets a ThreadPriority value that is used by the operating system to prioritize thread scheduling. Дополнительные сведения см. в разделе Планирование потоков и в справочнике по ThreadPriority.For more information, see Scheduling threads and the ThreadPriority reference.
ThreadState Возвращает значение ThreadState, содержащее текущие состояния потока.Gets a ThreadState value containing the current states of a thread.

См. такжеSee also