WF 中的活動撰寫選項
.NET Framework 4.6.1 提供數個選項來建立自訂活動。 用於撰寫指定活動的正確方法,要視所需的執行階段功能而定。
決定要用於撰寫自訂活動的基底活動類別
下表列出自訂活動基底類別中可用的功能。
基底活動類別 | 可用的功能 |
---|---|
Activity | 將系統提供的群組和自訂活動撰寫至複合活動。 |
CodeActivity | 提供可覆寫的 Execute 方法來實作命令式功能。 同時也會提供對追蹤、變數和引數的存取。 |
NativeActivity | 提供 CodeActivity 的所有功能,加上中止活動執行、取消子活動執行、使用書籤,以及排程活動、活動動作與功能等。 |
DynamicActivity | 提供 DOM 式方法來建構具有 WF 設計工具的活動以及透過 ICustomTypeDescriptor 的執行階段機制,不必定義新型別即可建立新活動。 |
使用 Activity 撰寫活動
衍生自 Activity 的活動會藉由組裝其他現有活動來撰寫功能。 這些活動可以是來自 .NET Framework 4.6.1 活動程式庫的現有自訂活動和活動。 組裝這些活動是建立自訂功能最基本的方式。 當使用視覺設計環境來撰寫工作流程時,最常採用這個方法。
使用 CodeActivity 或 AsyncCodeActivity 製作活動
衍生自 CodeActivity 或 AsyncCodeActivity 的活動,可覆寫包含自訂命令式程式碼的 Execute 方法,以實作命令式功能。 由執行階段執行活動時,就會執行自訂程式碼。 以這種方式建立的活動可以存取自訂功能,但卻無法存取執行階段的所有功能,例如完整存取執行環境、排定子活動、書籤建立或支援 Cancel 或 Abort 方法。 當 CodeActivity 執行時,其可存取執行環境的縮減版 (透過 CodeActivityContext 或 AsyncCodeActivityContext 類別)。 使用 CodeActivity 建立的活動可存取引數與變數解析、延伸與追蹤。 非同步排程活動可使用 AsyncCodeActivity 來進行。
使用 NativeActivity 撰寫活動
衍生自 NativeActivity 的活動,就像衍生自 CodeActivity 的活動一樣,會覆寫 Execute 來建立命令式功能,但也可透過傳遞至 NativeActivityContext 方法的 Execute 來存取工作流程執行階段的所有功能。 此內容可支援排定和取消子活動、執行 ActivityAction 和 ActivityFunc<TResult> 物件、將交易流動到工作流程中、叫用非同步處理序、取消和中止執行、存取執行屬性和擴充,以及書籤 (恢復暫停工作流程的控點)。
使用 DynamicActivity 撰寫活動
與其他三種活動型別不同,新功能並非從 DynamicActivity (類別已密封) 衍生新型別來建立,而是使用活動文件物件模型 (DOM),將功能組裝成 Properties 和 Implementation 屬性來建立。
撰寫傳回結果的活動
許多活動都必須在執行過後傳回結果。 雖然永遠都可為了這個目的在活動上定義自訂的 OutArgument<T>,但我們還是建議改用 Activity<TResult>,或衍生自 CodeActivity<TResult> 或 NativeActivity<TResult>。 這裡每個基底類別都有活動可用來傳回值的 OutArgument<T> 具名「結果」。 唯有在只需要從活動傳回一個結果時,才應使用傳回結果的活動;如果需要傳回多個結果,請改用獨立的 OutArgument<T> 成員。