實務開發中應使用 WorkflowApplication 管理工作流實例,而非 WorkflowInvoker。本文說明實例管理、XAML 動態載入,以及正確的 WF 架構設計原則。
WorkflowInstance,密封類別Activity 建立實例Completed、Aborted、OnUnhandledException、Run()、Id 等關鍵成員
Action<WorkflowApplicationCompletedEventArgs> Completed { get; set; }
WorkflowApplicationCompletedEventArgs 提供:
CompletionState:ActivityInstanceState (Closed/Faulted/Canceled)Outputs:Out/InOut 參數值TerminationException:終止例外InstanceId:實例識別碼static void Main(string[] args)
{
var instance = new WorkflowApplication(new Workflow1());
instance.Completed = e =>
{
Console.WriteLine("狀態:{0}", e.CompletionState);
Console.WriteLine("實例編號:{0}", e.InstanceId);
};
Console.WriteLine(instance.Id);
instance.Run();
Console.Read();
}

錯誤觀念:以為 Workflow Console Application(類別式流程)是唯一開發方式。
正確架構:
ActivityXamlServices.Load 動態載入WFHost,方案名 LoadXamlSampleSystem.ActivitiesxamlTextBox, AcceptsReturn=True) + Button (runButton)

private void runButton_Click(object sender, RoutedEventArgs e)
{
var utf8 = new UTF8Encoding();
var bs = utf8.GetBytes(this.xamlTextBox.Text);
var ms = new MemoryStream(bs);
var activity = ActivityXamlServices.Load(ms);
var instance = new WorkflowApplication(activity);
instance.Run();
}

wxwinterWorkflow

在設計器選擇「檢視 XAML」複製內容。


// WF 3.x
var runtime = new WorkflowRuntime();
var instance = runtime.CreateWorkflow(typeof(wxwinterActivity));
instance.Start();
// WF 4.0
var instance = new WorkflowApplication(new Workflow1()); // 或載入 XAML
instance.Run();
WF 4.0 移除 WorkflowRuntime,直接用 WorkflowApplication(Beta2 前稱 WorkflowInstance)。
