Поделиться через


DispatchSource Класс

Определение

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

public class DispatchSource : CoreFoundation.DispatchObject
type DispatchSource = class
    inherit DispatchObject
Наследование
DispatchSource
Наследование
Производный

Комментарии

Источники событий диспетчеризации можно использовать для мониторинга различных системных объектов и событий, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.  Чтобы отслеживать определенный тип источника, создайте экземпляр одного из подклассов DispatchSource:

При изменении состояния источник диспетчеризации отправляет свой блок обработчика событий в целевую очередь.

Вновь созданные источники создаются в приостановленном состоянии. После настройки источника путем настройки обработчика событий, обработчика отмены, обработчика регистрации, контекста и т. д., источник должен быть активирован вызовом Resume() , прежде чем будут доставлены какие-либо события.

Обработчики исходных событий

Для получения событий из источника отправки необходимо указать обработчик событий с помощью SetEventHandler(Action). Обработчик событий отправляется в целевую очередь источника при изменении состояния базового системного дескриптора или при возникновении события. Если источник возобновляется без заданного блока обработчика событий, события будут игнорироваться без звука. Если обработчик событий изменяется во время приостановки источника или из блока, работающего в последовательной очереди, которая является целевой очередью источника, то следующий вызов обработчика событий будет использовать новый блок.

Источники отправки могут быть приостановлены или возобновлены независимо от целевых очередей с помощью Suspend() и Resume() непосредственно в источнике отправки. Данные, описывающие события, возникающие во время приостановки работы источника, объединяются и доставляются после возобновления работы источника.

Обработчик не обязательно должен быть безопасным для повторного входа, так как он не отправляется в целевую очередь до завершения какого-либо предыдущего вызова для этого источника диспетчеризации.

Чтобы отменить установку обработчика событий, вызов SetEventHandler(Action) передает null в качестве аргумента.

Регистрация

При Resume() вызове для приостановленного или вновь созданного источника может возникнуть небольшая задержка, прежде чем источник будет готов к получению событий от базового системного дескриптора. Во время этой задержки обработчик событий не будет вызываться, и события будут пропущены.

После регистрации источника отправки в базовой системе и готовности к обработке всех событий его необязательный обработчик регистрации будет отправлен в целевую очередь. Этот обработчик регистрации можно указать с помощью SetRegistrationHandler(Action).

Обработчик событий не будет вызываться, пока не завершится процесс регистрации. Если источник будет отменен (см. ниже) до его регистрации, его обработчик регистрации вызываться не будет.

Отмена

Функция Cancel() асинхронно отменяет источник отправки, предотвращая дальнейший вызов блока обработчика событий. Отмена не прерывает выполняющийся в данный момент блок обработчика (без вытеснения). Если источник отменяется до первого возобновления, его обработчик событий никогда не вызывается. (В этом случае обратите внимание, что источник необходимо возобновить, прежде чем его можно будет освободить.)

Функция IsCanceled может использоваться для определения отмены указанного источника.

При отмене источника отправки его необязательный обработчик отмены будет отправлен в целевую очередь. Обработчик отмены можно указать с помощью SetCancelHandler(Action). Этот обработчик отмены вызывается только один раз и только как прямое следствие вызова Cancel().

Важно! Обработчик отмены требуется для источников на основе дескриптора файлов и портов mach, чтобы безопасно закрыть дескриптор или уничтожить порт. Закрытие дескриптора или порта до запуска обработчика отмены может привести к состоянию гонки: если новый дескриптор выделяется с тем же значением, что и недавно закрытый дескриптор, пока обработчик событий источника все еще работает, обработчик событий может считывать или записывать данные в неправильный дескриптор.

Свойства

Handle

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от DispatchObject)
IsCanceled

Определите, был ли отменен указанный источник.

Методы

Activate()

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от DispatchObject)
Cancel()

Асинхронно отменяет источник отправки.

Check()
Устаревшие..

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от DispatchObject)
Dispose()

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от DispatchObject)
Dispose(Boolean)

Освобождает ресурсы, используемые объектом DispatchSource.

Equals(Object)

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от DispatchObject)
GetHashCode()

Возвращает хэш-код для этого объекта.

(Унаследовано от DispatchObject)
InitializeHandle(IntPtr)

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от NativeObject)
Release()

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от DispatchObject)
Resume()

Возобновляет отправку источника.

Retain()

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от DispatchObject)
SetCancelHandler(Action)

Предоставляет обработчик отмены

SetEventHandler(Action)

Указан обработчик для выполнения при получении событий в источнике отправки.

SetRegistrationHandler(Action)

Предоставляет обработчик регистрации

SetTargetQueue(DispatchQueue)

DispatchSource — это базовый класс, используемый для воспроизведения источников событий, которые могут отслеживать различные системные объекты и события, включая дескрипторы файлов, порты mach, процессы, узлы виртуальной файловой системы, доставку сигналов и таймеры.

(Унаследовано от DispatchObject)
Suspend()

Приостанавливает источник отправки.

Применяется к