[上一节]
上一节我们通过一个简单的Hello程序,了解了Windows Workflow Foundation的开发环境环境以及如何使用。这次我们扩展上次的例子,做一个复杂一点的练习
在上节的例子中,调用的程序向工作流传入一个姓名,返回问候消息。这次我们让工作流判断用户的性别,返回不同的问候消息
新建一个“顺序工作流控制台应用程序”。
为了让工作流判断用户的性别,我们需要从工具箱找到IfElse控件,将它拖拽到工作流设计界面中,如下图:
和上次的Code Activity的例子一样,IfElse Activity也出现了红色惊叹号。因为我们没有设置IfElse第一个分支的Condition属性
首先我们需要为工作流添加如下代码:


1 //性别
2 string sex;
3 //姓名
4 string name;
5 //问候消息
6 string message;
7
8 public string 性别
9 {
10 set { sex = value; }
11 }
12 public string 姓名
13 {
14 set { name = value; }
15 }
16
17 public string 消息
18 {
19 get { return message; }
20 }
21
22 public void 判断性别(object sender, ConditionalEventArgs e)
23 {
24 if (sex == "男")
25 {
26 e.Result = true;
27 }
28 }
接下来回到工作流设计视图中,选择IfElse Activity左边第一个条件分支。右击找到它的属性,选择Condition属性,选择“代码条件”。
展开Condition属性,又会出现一个Condition属性,选择“判断性别”,如下图:
然后从工具箱中找到Code Activity拖拽到两个分支中,如下图:
分别设置两个分支的ExecuteCode事件,代码如下:


1 private void 问候男士Activity_ExecuteCode(object sender, EventArgs e)
2 {
3 message = String.Format("Hello,{0}先生", name);
4 }
5
6 private void 问候女士Activity_ExecuteCode(object sender, EventArgs e)
7 {
8 message = string.Format("Hello,{0}女士", name);
9 }
最后我们编写控制台应用程序,代码如下:


string message = string.Empty;
AutoResetEvent waitHandle = new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {
message = e.OutputParameters["消息"].ToString();
waitHandle.Set();};
workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
{
Console.WriteLine(e.Exception.Message);
waitHandle.Set();
};
Dictionary<string, object> InParms = new Dictionary<string, object>();
InParms.Add("姓名", "无忧");
InParms.Add("性别","男");
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(Demo2.Workflow1),InParms);
instance.Start();
waitHandle.WaitOne();
Console.WriteLine(message);
执行代码后效果如下图:
[源代码下载]
[下一节]