WorkflowInvoker 是 WF4.0 最輕量的工作流啟動器,特點:工作流附加在宿主執行緒上同步執行。這與使用執行緒池非同步執行的 WorkflowApplication 形成鮮明對比。本文詳細展示其靜態/實例、同步/非同步等多種調用模式。

// 有回傳值活動
int result = WorkflowInvoker.Invoke(new AddActivity(), new Dictionary<string,object> {{"X",1},{"Y",2}});
// 取得 OutArgument
var outputs = WorkflowInvoker.Invoke(new TestWorkflow(), inputs);
// 同時取得回傳值與 OutArgument
var outputs2 = new Dictionary<string,object>();
int result2 = WorkflowInvoker.Invoke(new ResultAndOutActivity(), inputs, out outputs2, TimeSpan.Zero);
結果展示:

實例模式下,回傳值與 OutArgument 統一在 Dictionary 中回傳 (Key 為 "Result" 或參數名)。
var invoker = new WorkflowInvoker(new AddActivity());
var resultDict = invoker.Invoke(inputs); // 包含 Result
foreach (var kv in resultDict) Console.WriteLine(kv);
結果:

InvokeAsync + InvokeCompleted 事件 
BeginInvoke + EndInvoke + AsyncCallback 
var invoker = new WorkflowInvoker(wf);
invoker.Extensions.Add(myTrackingParticipant);
invoker.Invoke(inputs);