語言

DispatchSource 類別

定義

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

public class DispatchSource : CoreFoundation.DispatchObject
type DispatchSource = class
    inherit DispatchObject
繼承
衍生

備註

派遣事件來源可用於監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。  為了監控特定類型的來源,你可以建立其中一個 DispatchSource 子類別的實例:

當狀態發生變更時,派遣來源會將其事件處理區塊提交至目標佇列。

新建立的原始碼會處於暫停狀態。 在設定事件處理程序、取消處理程序、註冊處理程序、上下文等設定後,必須先透過呼叫 Resume() 啟動原始碼,才能傳送任何事件。

來源事件處理程式

要從派遣來源接收事件,應透過 指定 SetEventHandler(Action)事件處理程序。 當底層系統處理柄的狀態改變或事件發生時,事件處理程序會提交至來源的目標佇列。 若原始碼在未設定事件處理區塊的情況下繼續,事件將被悄悄忽略。 如果事件處理程序在來源暫停時被更改,或是從序列佇列中執行的區塊變更,該區塊是該來源的目標佇列,那麼下一次事件處理程序的呼叫將使用該新區塊。

派遣來源可以獨立於其目標佇列 Suspend() 使用及 Resume() 直接在派遣來源上被暫停或恢復。 描述在訊號暫停期間發生的事件資料會被整合並傳送,當訊號源恢復時。

處理器不需要重入安全,因為在該派遣來源的任何先前調用完成前,處理器才會重新提交到目標佇列。

要解除事件處理程序,請以參數呼叫 SetEventHandler(Action) pass null 。

Registration

當 Resume() 在暫停或新建立的原始碼上呼叫時,可能會有短暫的延遲,直到原始碼準備好接收底層系統 handle 的事件。 在此延遲期間,事件處理程序將不會被調用,事件也會被錯過。

一旦派遣來源在底層系統註冊並準備處理所有事件後,其可選的註冊處理程序會被提交至目標佇列。 此註冊處理程序可透過 SetRegistrationHandler(Action)指定。

事件處理程序在註冊處理程序完成前不會被呼叫。 如果原始碼在註冊前被取消(見下文),其註冊處理器將不會被呼叫。

取消

該 Cancel() 函式會非同步取消派遣來源,阻止其事件處理區塊的進一步呼叫。 取消不會中斷目前執行中的處理器區塊(非搶占式)。 如果原始碼在第一次恢復前被取消,其事件處理器將永遠不會被呼叫。 (此時請注意,必須先恢復原始碼才能釋放。)

此 IsCanceled 函數可用來判斷指定的來源是否已被取消。

當派遣來源被取消時,其可選的取消處理程序會被提交到目標佇列。 消去處理程序可透過 SetCancelHandler(Action)來指定。 此消去處理程序僅被調用一次,且僅在呼叫 Cancel()後直接結果。

重要提示:檔案描述符與 mach port 來源需要取消處理程序,以安全關閉描述符或銷毀埠。 在取消處理程序執行前關閉描述符或埠,可能會導致競賽條件:若在來源事件處理程序仍在運行時,分配了與最近關閉描述符相同值的新描述符,事件處理程序可能會讀寫錯誤的描述符。

屬性

名稱 Description
Handle

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DisposableObject)
IsCanceled

確認指定的來源是否已被取消。

Owns

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DisposableObject)

方法

名稱 Description
Activate()

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DispatchObject)
Cancel()

非同步取消派遣來源。

ClearHandle()

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DisposableObject)
Dispose()

釋放此物件所使用的所有資源。

(繼承來源 DisposableObject)
Dispose(Boolean)

釋放 DispatchSource 物件所使用的資源。

Equals(Object)

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DisposableObject)
GetCheckedHandle()

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DisposableObject)
GetHashCode()

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DisposableObject)
InitializeHandle(NativeHandle)

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DisposableObject)
Release()

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DispatchObject)
Resume()

調度來源繼續。

Retain()

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DispatchObject)
SetCancelHandler(Action)

提供取消處理程序

SetEventHandler(Action)

指定一個處理程序,當派遣來源收到事件時執行。

SetRegistrationHandler(Action)

提供註冊處理程序

SetTargetQueue(DispatchQueue)

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

(繼承來源 DispatchObject)
Suspend()

暫停調度來源。

擴充方法

名稱 Description
GetHandle(INativeObject)

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

GetNonNullHandle(INativeObject, String)

DispatchSource 是一個基底類別,用於重新設定事件來源,能監控各種系統物件與事件,包括檔案描述符、mach 埠、程序、虛擬檔案系統節點、訊號傳遞及計時器。

適用於