.NET Framework 4.6.1 提供多種自訂活動的選項。 撰寫特定活動的正確方法取決於所需的執行時功能。
決定使用哪個基礎活動類別來撰寫自訂活動
下表列出自訂活動基底類別中可用的功能。
| 基礎活動類別 | 可用的功能 |
|---|---|
| Activity | 將系統提供的與自訂活動群組組成一個複合活動。 |
| CodeActivity | 透過提供 Execute 可覆寫的方法來實作命令式功能。 同時提供追蹤、變數與參數的存取。 |
| NativeActivity | 提供所有功能 CodeActivity,並可中止活動執行、取消子活動執行、使用書籤,以及排程活動、活動動作與函式。 |
| DynamicActivity | 提供類似 DOM 的活動建構方法,透過 與 WF 設計器及執行時機制 ICustomTypeDescriptor介面,允許建立新活動而無需定義新類型。 |
使用活動來撰寫活動
由 compose 函數衍生 Activity 的活動,透過組合其他現有活動來實現。 這些活動可以是現有的自訂活動,也可以是來自 .NET Framework 4.6.1 活動函式庫的活動。 組合這些活動是建立自訂功能最基本的方式。 這種方法最常見於使用視覺設計環境來撰寫工作流程時。
使用 CodeActivity 或 AsyncCodeActivity 撰寫活動
這些活動源自 CodeActivity 或 AsyncCodeActivity 能透過自訂命令式程式碼覆寫 Execute 方法來實作命令式功能。 當執行時執行活動時,自訂程式碼會被執行。 雖然以這種方式建立的活動可以使用自訂功能,但它們無法使用執行時的所有功能,例如完整執行環境存取權、排程子活動、書籤建立,或支援取消或中止方法。 執行時CodeActivity,它可透過 or AsyncCodeActivityContext 類別存取簡化版的執行環境CodeActivityContext。 使用 的 CodeActivity 活動可存取參數與變數解析、擴充功能及追蹤功能。 非同步活動排程可利用 AsyncCodeActivity進行。
使用 NativeActivity 撰寫活動
源自 NativeActivity的活動如 衍生於 CodeActivity的活動,透過覆寫 Execute來創造命令式功能,同時也能透過傳遞到Execute方法的 存取NativeActivityContext工作流程執行時的所有功能。 此上下文支援排程與取消子活動、執行 ActivityAction 與 ActivityFunc<TResult> 物件、將交易流入工作流程、呼叫非同步程序、取消與中止執行、存取執行屬性與擴充功能,以及書籤(用於恢復暫停工作流程的句柄)。
使用 DynamicActivity 撰寫活動
與其他三種活動類型不同,新功能不是透過從中衍生新類型 DynamicActivity (類別被封閉)來創造,而是透過使用活動文件物件模型(DOM)將功能組合到 Properties 屬性 Implementation 中。
回傳結果的撰寫活動
許多活動執行後必須回傳結果。 雖然可以為活動定義慣例 OutArgument<T> 以達成此目的,但建議改用 Activity<TResult>,或從 CodeActivity<TResult> 或 NativeActivity<TResult>衍生。 這些基底類別各自有一個 OutArgument<T> 命名的結果,你的活動可以用它作為回傳值。 僅在只需返回一個結果時,才應使用回傳結果的活動;若需返回多個結果,則應使用不同的 OutArgument<T> 成員。