Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
С помощью .NET можно создавать приложения, выполняющие несколько операций одновременно. Операции, могущие задержать выполнение других операций, могут выполняться в отдельных потоках, процесс, известный как многопоточность или свободная многопоточность.
Приложения, использующие многопоточность, более чутко реагируют на входные данные пользователей, так как пользовательский интерфейс остается активным в то время как ресурсоемкие задачи выполняются в отдельных потоках. Многопоточность также полезна при создании масштабируемых приложений, так как можно добавлять потоки по мере увеличения рабочей нагрузки.
Замечание
Если вам нужен более контроль над поведением потоков приложения, вы можете самостоятельно управлять потоками. Однако многопоточное программирование значительно упрощено благодаря классам System.Threading.Tasks.Parallel и System.Threading.Tasks.Task, Parallel LINQ (PLINQ), классам параллельных коллекций в пространстве имен System.Collections.Concurrent, и модели программирования, основанной на концепции задач, а не потоков. Дополнительные сведения см. в разделе "Параллельное программирование" и "Параллельная библиотека задач" (TPL).
Как создать и запустить новый поток
Вы создаете новый поток, создавая новый экземпляр класса System.Threading.Thread. Укажите имя метода, который требуется выполнить в новом потоке конструктору. Чтобы запустить созданный поток, вызовите Thread.Start метод. Дополнительные сведения и примеры см. в статье о создании потоков и передаче данных при запуске и документации Thread по API.
Как остановить поток
Чтобы завершить выполнение потока, используйте параметр System.Threading.CancellationToken. Он предоставляет единый способ для кооперативной остановки потоков. Дополнительные сведения см. в разделе "Отмена" в управляемых потоках.
Иногда невозможно остановить поток совместно, так как он запускает сторонний код, не предназначенный для совместной отмены. В этом случае может потребоваться принудительно завершить его выполнение. Чтобы завершить выполнение потока принудительно, можно использовать метод Thread.Abort в .NET Framework. Этот метод инициирует ThreadAbortException в потоке, на котором он вызывается. Дополнительные сведения см. в разделе Уничтожение потоков. Метод Thread.Abort не поддерживается в .NET Core. Если необходимо завершить выполнение стороннего кода принудительно в .NET Core, запустите его в отдельном процессе и используйте Process.Kill метод.
Эта функция System.Threading.CancellationToken недоступна до версии .NET Framework 4. Чтобы остановить поток в более ранних версиях .NET Framework, используйте методы синхронизации потоков для реализации совместной отмены вручную. Например, можно создать volatile логическое поле shouldStop
и использовать его для запроса остановки выполнения кода потоком. Дополнительные сведения можно найти в справочнике по C# и .
Используйте метод Thread.Join, чтобы заставить вызывающий поток ждать завершения работы остановленного потока.
Как: Приостановка или прерывание потока
Метод Thread.Sleep используется для приостановки текущего потока в течение указанного периода времени. Вы можете прервать заблокированный поток, вызвав Thread.Interrupt метод. Дополнительные сведения см. в разделе "Приостановка" и прерывание потоков.
Свойства потока
В следующей таблице представлены некоторые Thread свойства:
Недвижимость | Описание |
---|---|
IsAlive | Возвращает true , если поток был запущен и еще не завершился нормально или был прерван. |
IsBackground | Возвращает или задает логическое значение, указывающее, является ли поток фоновым. Фоновые потоки похожи на потоки переднего плана. Однако фоновый поток не предотвращает остановку процесса. После того как все потоки переднего плана, принадлежащие процессу, остановлены, общая среда выполнения завершает процесс, вызывая метод Abort на фоновых потоках, которые все еще активны. Для получения дополнительной информации см. раздел "Основные и фоновые потоки". |
Name | Возвращает или задает имя потока. Чаще всего используется для обнаружения отдельных потоков при отладке. |
Priority | Возвращает или задает ThreadPriority значение, используемое операционной системой для определения приоритета планирования потоков. Дополнительные сведения см. в разделе «Планирование потоков» и в справочном материале ThreadPriority. |
ThreadState | ThreadState Возвращает значение, содержащее текущее состояние потока. |