除了Invoke方法,WorkflowInvoker中其他有趣的成員是BeginInvoke()和EndInvoke(),他們使用.net異步委托模式,在另一個線程中啟動工作流。如果希望對WF運行時操作工作流有更多的控制,可以使用WorkflowApplication
要保存和加載一個使用WF持久化服務長期運行的工作流,可以使用WorkflowApplication。它具有接收工作流實例生命周期中觸發的各種事件的通知、WF“書簽”等其他高級特性。
下面修改第二個實例的Main方法,使用WorkflowApplication替代WorkflowInvoker
static void Main(string[] args)
{
string wfData = Console.ReadLine();
//這里用Dictionary類型,因為Invoke重載接受這種鍵值對的類型
Dictionary wfArgs = new Dictionary();
//使用鍵值對,鍵為我們剛才加的參數名稱,將數據存入到字典中
wfArgs.Add("Message", wfData);
AutoResetEvent waitHandler = new AutoResetEvent(false);
//傳遞給工作流
WorkflowApplication app = new WorkflowApplication(new Activity1(), wfArgs);
//將事件與app掛鈎,當工作流結束前,通知其他線程,並打印一條信息
app.Completed = (completedArgs) =>
{
waitHandler.Set();
Console.WriteLine("the workflow is done");
};
//開啟工作流
app.Run();
//在工作流程結束之前一直等待
waitHandler.WaitOne();
Console.WriteLine("結束了");
}
輸出結果:
使用WorkflowApplication的好處是,可以將工作流與事件掛鈎,並且可以使用更復雜的服務(如持久化,書簽等)