一、第一个例子
首先我们在VS中创建一个workflow控制台程序。只有在.NET Framework3.0以后才能显示出workflow的工程模板。
我们选择.NET Framework 4,类型选Workflow ConsoleApplicaiton。
解决方案和称和工程名称随意。我分别用Chapter01和HelloWorkflow。
向设计器中先拖一个Seaquece活动,再拖一个WriteLine活动到它里面。WriteLine里写上"Helloworkflow"。F5运行。能看到控制台输出字符。
Program类中的Main函数里如下两行代码创建并启动了一个工作流。
Activity workflow1 =newWorkflow1();
WorkflowInvoker.Invoke(workflow1);
二、使用代码定义工作流。
首先删除xaml文件,删除上述两行代码。
在空间HelloWorkflow中定义新类,命名为HelloWorkflow,代码如下:
public class HelloWorkflow : Activity
{
public HellowWorkflow()
{
this.Implematation=() => new Sequence()
{
Activities= {
newWriteLine() { Text="Hello Workflow" }
}
}
}
解释一下,我们将HelloWorklow类的对象的Implematation属性设为一个顺序活动,其中添加一个WriteLine活动。
Main函数中添加:
WorkflowInvoker.Invoke(newHelloWorkflow());
运行后,效果与上一个例子相同。
三、创建另一种工作流,新建项目,选择.NET Framework 3.5,选择SequentialWorkflow Console Application, 命名PCodeWorkflow。
会看到一个设计视图。拖一个IfElse活动到起点和终点之间。
点击红色叹号,在右侧的属性中的Condition行选“Code Condition”,点Condition左侧的加号,在“Condition”行写函数名称 “EvaluatePostCode”。
在工具箱拖两个Code Activity到两个分支。分别在执行代码中写函数名PostCodeValid和PostCodeInvalid。
在Workflow1.cs中生成上述三个函数。
private voidEvaluatePostCode(object sender, ConditionalEventArgs e)
{
string USCode = @"^(\d{5}$)|(\d{5}$\-\d{4}$)";
string CanadianCode = @"[ABCEGHJKLMNPRSTVXY]\D[A-Z]\d[A-Z]\d";
e.Result = (Regex.IsMatch(_code,USCode) || Regex.IsMatch(_code, CanadianCode));
}
private void PostalCodeValid(objectsender, EventArgs e)
{
Console.Write("The postal code{0} is valid.", _code);
}
private void PostalCodeInvalid(object sender, EventArgse)
{
Console.Write("The postal code{0} is invalid.", _code);
Console.ReadLine();
}
并定义如下属性:
private string _code = string.Empty;
public string PostalCode
{
get
{
return _code;
}
set
{
_code = value;
}
}
打开program.cs,定位到WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(PCodeFlow.Workflow1),wfArgs);
修改为
Dictionary<string,object> wfArgs = newDictionary<string, object>();
wfArgs.Add("PostalCode",args.Length > 0? args[0] : "");
WorkflowInstanceinstance = workflowRuntime.CreateWorkflow(typeof(PCodeFlow.Workflow1),wfArgs);
编译程序。打开cmd,定位到工程的debug目录,执行PCodeflow.exe,后边记得加上参数。