- •Графический интерфейс пользователей
- •Объектная модель программы
- •Основной элемент графического интерфейса – окна (windows)
- •Отношения между окнами
- •Типы окон
- •Программирование графического интерфейса (gui)
- •Содержание окна
- •Контекстное меню (ContextMenuStrip)
- •Библиотека api функций для рисования gdi32.Dll
- •Основной класс рисования Graphics
- •Основные методы класса Graphics
- •Получение объекта Graphics
- •Событие Paint
- •Выполнение рисования
- •Система координат. Система координат и единиц измерения
- •Классы для описания геометрических объектов
- •Операции с изображениями
- •Курсор мыши
- •Основные события устройства «мышь»
- •Размер окна
- •Свойство Anchor
- •Компоненты
- •Элементы управления для работы с принтером – Printing
- •Автоматизация создания программы
- •Окно списков ListBox
- •Коллекция элементов ListBox
- •Комбинированные окна ComboBox
- •Элемент CheckedListBox
- •Класс PictureBox
- •Элемент управления WebBrowser
- •Элемент управления ProgressBar
- •Элемент NumericUpDown
- •Подсказки – ToolTip
- •Процессы и потоки
- •Виды многопоточности:
- •Преимущества многопоточности
- •Случаи использования многопоточности:
- •Потоки в с#
- •Основные статические свойства:
- •Недостатки многопоточности
- •Методы управления потоками
- •Свойства потока.
- •Приоритеты потоков
- •Передача данных в ThreadStart
- •Управление потоками
- •Ресурсы, требующие синхронизации:
- •Простейшие методы блокировки.
- •Оператор lock
- •Класс Interlocked
- •Класс Monitor
- •Классы ManualResetEvent и AutoResetEvent
- •Атрибут [Synchronization]
- •Константы:
- •Минимально необходимые действия для использования BackgroundWorker:
- •Чтобы добавить отображение выполнения операции:
- •Чтобы иметь возможность отмены операции:
- •Задачи (класс Task)
- •Статусы задачи
- •Применение идентификатора задачи
- •Методы ожидания завершения задачи
- •Класс TaskFactory
- •Работа с данными в задаче
- •Вложенные задачи.
- •Механизм отмены задач.
- •Создание продолжения задачи
- •Шаблоны параллелизма Parallel
- •Метод For()
- •Досрочный выход из цикла
Минимально необходимые действия для использования BackgroundWorker:
Создать экземпляр BackgroundWorker и назначить обработчик для события DoWork.
Вызвать RunWorkerAsync, если необходимо – с нужным object в качестве аргумента.
После этих действий начнется исполнение. Аргумент, переданный в RunWorkerAsync, будет перенаправлен в обработчик DoWork как свойство Argument параметраDoWorkEventArgs.
BackgroundWorker также предоставляет событие RunWorkerCompleted, которое генерируется после завершения выполнения действий обработчика события DoWork.
ОбработкаRunWorkerCompleted необязательна, но обычно применяется, хотя бы для того, чтобы получить информацию о возможных исключениях в DoWork.
Чтобы добавить отображение выполнения операции:
Установить свойство WorkerReportsProgress в true.
Периодически вызывать ReportProgress из обработчика DoWork с указанием количества “выполненных процентов”.
Обрабатывать событие ProgressChanged, запрашивая войство ProgressPercentage его аргумента.
Чтобы иметь возможность отмены операции:
Установить свойство WorkerSupportsCancellation в true.
Периодически проверять свойство CancellationPending в обработчике DoWork – если оно установлено в true, установить свойство Cancel аргумента DoWorkEventArgs в true и сделать return.
Для запроса отмены операции вызывать CancelAsync.
Задачи (класс Task)
Task – инкапсулирует единицу работы
Task<TResult> - единица работы с определенным типом результата
TaskFactory, TaskFactory<TResult> – фабрики создания задач
TaskScheduler – управляет «расписанием» запуска задач
TaskCompletionSource – управляет «временем жизни» задачи
В основу TPL положен класс Task. Элементарная единица исполнения инкапсулируется в TPL средствами класса Task, а не Thread. Класс Task отличается от класса Thread тем, что он является абстракцией, представляющей асинхронную операцию. А в классе Thread инкапсулируется поток исполнения.
Исполнением задач управляет планировщик задач, который работает с пулом потоков. Это, означает, что несколько задач могут разделять один и тот же поток.
Работа с задачами, как правило, включает три основные операции: объявление задачи, добавление задачи в очередь готовых задач, ожидание завершения выполнения задачи.
Важное отличие заключается в том, что вызов метода Start для задачи не создает новый поток, а помещает задачу в очередь готовых задач – пул потоков.
Планировщик (TaskScheduler) в соответствии со своими правилами распределяет готовые задачи по рабочим потокам. Действия планировщика можно корректировать с помощью параметров задач. Момент фактического запуска задачи в общем случае не определен и зависит от загруженности пула потоков.
Статусы задачи
Задача может находиться в нескольких состояниях:
Created,
Running,
WaitingToRun,
Faulted,
Canceled,
RanToCompletion,
WaitingForActivation,
WaitingForChildrenToComplete.
