Слайд 2Thread. Особенности и применение.
Потоки удобны в применении, когда требуется:
Выполнять операции в фоновом
режиме без необходимости в ожидании их завершения
Ускорить выполнение операции путем ее распараллеливания по потокам
Задать потоку имя, чтобы было удобнее искать его в отладчике
Поставить повышенный или пониженный приоритет потоку
Слайд 3Thread. Основные свойства.
Пространство имен - System.Threading;
CurrentContext позволяет получить контекст, в котором выполняется
поток
CurrentThread возвращает ссылку на выполняемый поток
IsAlive указывает, работает ли поток в текущий момент
IsBackground указывает, является ли поток фоновым
Name содержит имя потока
Priority хранит приоритет потока - значение перечисления ThreadPriority
ThreadState возвращает состояние потока - одно из значений перечисления ThreadState
Слайд 4Thread. Некоторые методы.
Sleep останавливает поток на определенное количество миллисекунд
Abort уведомляет среду CLR
о том, что надо прекратить поток, однако прекращение работы потока происходит не сразу, а только тогда, когда это становится возможно. Для проверки завершенности потока следует опрашивать его свойство ThreadState
Interrupt прерывает поток на некоторое время
Join блокирует выполнение вызвавшего его потока до тех пор, пока не завершится поток, для которого был вызван данный метод
Resume возобновляет работу ранее приостановленного потока
Start запускает поток
Suspend приостанавливает поток
Слайд 5Thread. Создание и запуск.
Для запуска нового потока нам надо определить задачу в
приложении, которую будет выполнять данный поток. Для этого мы можем ввести добавить новый метод, производящий какие-либо действия.
Слайд 6Thread. Создание и запуск.
Для создания нового потока используется делегат ThreadStart, который получает
в качестве параметра метод, который мы определили выше.
Чтобы запустить поток, вызывается метод Start.
Слайд 7Thread. Передача параметров в поток.
Для этой цели используется делегат ParameterizedThreadStart. Его действие
похоже на функциональность делегата ThreadStart.
Слайд 8Thread. Доступ к элементам окна.
Слайд 9Thread. Доступ к элементам окна. Invoke.
Слайд 10BackgroundWorker. Возможности.
BackgroundWorker – класс из пространства имен System.ComponentModel для управления рабочими потоками. Он обеспечивает следующие
возможности:
Флаг отмены операции для завершения потока без использования Abort.
Стандартный протокол для сообщений о ходе выполнения операции, ее завершении и отмене.
Обработка исключений в рабочем потоке.
Возможность обновления элементов управления окна в процессе выполнения или при завершении операции.
Вывод: можно не добавлять try/catch в рабочий метод и обновлять элементы управления без использования Control.Invoke.
Слайд 11BackgroundWorker. Прогресс выполнения.
Чтобы добавить отображение выполнения операции:
Установите свойство WorkerReportsProgress в true.
Периодически вызывайте ReportProgress из обработчика DoWork с указанием
количества “выполненных процентов”
Обрабатывайте событие ProgressChanged, запрашивая свойство ProgressPercentage его аргумента.
Код в обработчике ProgressChanged может свободно обращаться к элементам управления UI так же, как и в RunWorkerCompleted. Обычно это нужно для обновления индикатора прогресса.
Слайд 12BackgroundWorker. Отмена операции.
Чтобы иметь возможность отмены операции:
Установите свойство WorkerSupportsCancellation в true.
Периодически проверяйте свойство CancellationPending в обработчике DoWork –
если оно установлено в true, установите свойство Cancel аргумента DoWorkEventArgs в true и сделайте return
Для запроса отмены операции вызывайте CancelAsync.
Слайд 13BackgroundWorker. Создание и запуск.
Слайд 16Task. Особенности.
Пространство имен - System.Threading.Tasks
Практически нет накладных расходов при создании
Могут возвращать результат
Поддерживают
отмену выполнения задачи
Возможно асинхронное выполнение
Слайд 18Task. Async/Await.
Ключевое слово async указывает, что метод или лямбда-выражение может выполняться асинхронно. А оператор await позволяет
остановить текущий поток, пока не завершится работа метода, помеченного как async.
Эти операторы используются вместе для создания асинхронного метода. Такой метод, определенный с помощью модификатора async и содержащий одно или несколько выражений await, называется асинхронным методом.