可以看到,对于类文件、命名空间的引用,xml使用的schema限定等都在WorkFlow1.xaml中进行了描述。
.NET3.5中Program.cs中代码如下:
class Program
{
static void Main(string[] args)
{
using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };
workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
{
Console.WriteLine(e.Exception.Message);
waitHandle.Set();
};
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFSequenceTest.Workflow1));
instance.Start();
waitHandle.WaitOne();
}
}
}
{
static void Main(string[] args)
{
using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };
workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
{
Console.WriteLine(e.Exception.Message);
waitHandle.Set();
};
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFSequenceTest.Workflow1));
instance.Start();
waitHandle.WaitOne();
}
}
}
代码中对流程实例完成、流程实例终止进行了事件的处理,然后通过用户定义的Workflow1创建WorkflowInstance,调用instance.Start()开始执行流程。
.NET4.0中Program.cs代码如下:
class Program
{
static void Main(string[] args)
{
WorkflowInvoker.Invoke(new Workflow1());
}
}
{
static void Main(string[] args)
{
WorkflowInvoker.Invoke(new Workflow1());
}
}
代码中创建了一个Workflow1的实例,然后通过WorkflowInvoker.Invoke来开始执行流程。
通过对比不难发现,4.0的流程创建执行更简洁,也更符合思维习惯。以请假流程为例,请假人首先会填写个请假条,然后报领导审批就是;用工作流来描述这个过程就是,首先定义个请假流程,包括请假发起环节和请假审批环节,流程定义好之后,谁想请假了,填写请假表单,提交到领导审批环节即可;如果用程序来描述那就是设计一个请假流程(类、xaml等),创建实例并执行。我们很有可能会忘记一些事件的定制,然而有些情况下这往往会导致流程出现一些问题,例如3.5中我们需要定制两个事件,创建并开始流程实例的代码也比较繁琐。
总起来说4.0更灵活,更全面,更符合发展趋势。
文章比较浅,希望大家能通过这篇文章对3.0和4.0Workflow之间的不同有个感性的认识。