除了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的好处是,可以将工作流与事件挂钩,并且可以使用更复杂的服务(如持久化,书签等)