- •Атрибуты в среде .Net и языке c#.
- •Метаданные
- •Понятие атрибутов
- •Предопределенные и собственные атрибуты
- •Потребители атрибутов
- •Применение атрибутов
- •Сокращенное именование атрибутов
- •Создание собственных атрибутов:
- •Применение собственных атрибутов:
- •Ограничение использования атрибутов:
- •Атрибуты уровня сборки и модуля:
- •Рефлексия атрибутов:
- •Выводы:
- •Язык xml. Классы платформы .Net для работы с xml-данными.
- •Синтаксис xml
- •Работа с xml при помощи System.Xml
- •Работа с xml при помощи linq to xml
- •Выводы:
- •Потоковый ввод-вывод. Файлы. Работа с файлами и каталогами. Пространство имен System.Io
- •Классы Directory (DirectoryInfo) и File (FileInfo) Некоторые общие свойства классов DirectoryInfo и FileInfo:
- •Дополнительные возможности класса DirectoryInfo
- •Дополнительные возможности класса FileInfo
- •Дополнительные члены File
- •Потоковый ввод-вывод
- •Работа с классом FileStream
- •Работа с классами StreamWriter и StreamReader
- •Классы StringWriter и StringReader
- •Работа с классами BinaryWriter и BinaryReader
- •Выводы:
- •Сериализация. Атрибуты. Стандартные форматы сериализации. Понятие сериализации объектов
- •Роль графов объектов
- •Конфигурирование объектов для сериализации
- •Общедоступные поля, приватные поля и общедоступные свойства
- •Стандартные форматеры сериализации
- •Настройка сериализации с использованием атрибутов
- •Выводы:
- •Понятие бд и субд. Язык sql. Ado.Net как средство доступа из c# к субд. Понятие бд
- •Понятие субд
- •Обзор синтаксиса
- •Подключенный уровень
- •Автономный уровень
- •Основные свойства класса DataSet
- •Основные методы класса DataSet
- •Типы DataColumn и DataRow
- •Основные члены типа DataColumn:
- •Основные члены типа DataRow:
- •Работа с адаптерами данных:
- •Основные члены класса DbDataAdapter:
- •Параллельные вычисления. Многозадачность и многопоточность.
- •Некоторые члены класс Process:
- •Некоторые члены класса ProcessThread
- •Домены приложений
- •Некоторые члены класс AppDomain:
- •Многопоточность. Классификация состояний потока. Средства многопоточного программирования System.Threading.
- •Некоторые члены пространства имен System.Threading
- •Основные члены класс Thread
- •Состояния потока
- •Многопоточное программирование при помощи асинхронных вызовов делегатов
- •Создание вторичных потоков при помощи Thread.Start()
- •Синхронизация с помощью lock
- •Синхронизация с использованием типа System.Threading.Monitor
- •Синхронизация с использованием типа System.Threading.Interlocked
- •Синхронизация с использованием атрибута [Synchronization]
- •Использование System.Threading.Timer
- •Пул потоков clr
- •Библиотека Windows.Forms. Пространства имен. Структура приложения. Элементы управления. События. Иерархия элементов управления.
- •Основные пространства имен Windows Forms
- •Структура приложения WinForms
- •Элементы управления
- •События
- •Библиотека wpf. Отличия wpf от WindowsForms. Разметка xaml. Понятие Windows Presentation Foundation
- •Типы приложений wpf
- •Основные сборки wpf
- •Построение приложения wpf без xaml
- •Построение приложения wpf с использованием только xaml
- •Пример c# обработчика события для контрола, объявленного в xaml (связь кода и xaml):
- •Создание проекта
- •Знакомство с инструментами визуального конструктора wpf
Основные члены класс Thread
CurrentThread |
Ссылка на текущий выполняемый поток |
GetDomain() |
Ссылка на AppDomain текущего потока |
GetDomainlD() |
Идентификатор домена приложения текущего потока |
Sleep() |
Приостанавливает текущий поток на заданное время |
IsAlive |
Запущен ли поток (и еще не прерван и не отменен) |
IsBackground |
Является ли данный поток "фоновым" |
Name |
Позволяет установить дружественное текстовое имя потока, например для отладки |
Priority |
Приоритет потока (из перечисления ThreadPriority) |
ThreadState |
Состояние данного потока (из перечисления ThreadState ) |
Abort() |
Инструктирует CLR прервать поток, как только это будет возможно |
Interrupt () |
Прерывает (т.е. приостанавливает) текущий поток на заданный период ожидания |
Join() |
Блокирует вызывающий поток до тех пор, пока указанный поток не завершится |
Resume() |
Возобновляет ранее приостановленный поток |
Start() |
Инструктирует CLR запустить поток как можно скорее |
Suspend() |
Приостанавливает поток. Если поток уже приостановлен, ничего не делает |
Состояния потока
Running |
Поток выполняется, не заблокирован и исключение ThreadAbortException не было сгенерировано. |
StopRequested |
Поступил запрос на остановку потока. Используется внутренне средой CLR |
SuspendRequested |
Поступил запрос на усыпление потока. |
Background |
Поток является фоновым. Это состояние контролируется свойством Thread.IsBackground |
Unstarted |
Поток еще не запущен (для потока еще не был вызван метод Thread.Start()) |
Stopped |
Поток остановлен |
WaitSleepJoin |
Поток заблокирован. Возможные причины:
|
Suspended |
Поток усыплен |
AbortRequested |
Для потока был вызван метод Thread.Abort(), который порождает в потоке исключение System.Threading.ThreadAbortException, но исключение еще не было получено потоком |
Aborted |
Исключение ThreadAbortException получено потоком, и он уже завершен, однако его состояние еще не изменилось на Stopped |
Многопоточное программирование при помощи асинхронных вызовов делегатов
Для выполнения некоторого метода в параллельном потоке можно создать делегат, соответствующий данному методу:
// Объявляем тип делегата
delegate int ControlThreadOp(String InFile, String OutFile);
// Метод, который будет выполняться в отдельном потоке
private int ControlThread(String InFile, String OutFile)
{
// do something
return result;
}
Затем при помощи метода BeginInvoke () запустить его в отдельном потоке
// Создаем делегат
ControlThreadOp controlThread = new ControlThreadOp(ControlThread);
// Запускаем делегат асинхронно в параллельном потоке
IAsyncResult ar = controlThread.BeginInvoke(inFile, outFile, null, null);
Два последних параметра метода BeginInvoke позволяют установить делегат типа AsyncCallback, который будет выполнен при завершении работы нового потока, и передать в вызываемый поток произвольный параметр типа System.Object.
Если есть необходимость дождаться завершения выполнения потока, выполняющего делегат, можно использовать предоставляемый для этого синхронизационный объект:
// ждем завершения работы параллельного потока
ar.AsyncWaitHandle.WaitOne();
Получить результат выполненного метода можно при помощи вызова EndInvoke(). Если при этом вызове поток делегата еще не завершился, текущий поток будет заблокирован до конца его работы.
int result = controlThread.EndInvoke(ar);