第三个C#工作流实例--使用WorkflowAppliction承载工作流

除了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("结束了");
        }
输出结果:
第三个C#工作流实例--使用WorkflowAppliction承载工作流

使用WorkflowApplication的好处是,可以将工作流与事件挂钩,并且可以使用更复杂的服务(如持久化,书签等)
原文地址:https://www.cnblogs.com/zzw1986/p/4702228.html