您的位置:首页 > 编程语言

工作流编程循序渐进(1:代码活动与时间延迟活动)

2009-09-19 11:00 253 查看


工作流编程循序渐进(1:代码活动与时间延迟活动)

作者 朱先忠

创建控制台顺序工作流示例程序框架

请遵循如下步骤创建一个控制台顺序工作流示例程序:

1. 启动VS2008,单击菜单”文件“|”新建“|”项目“,创建一个名字为CodeAndDelay的控制台顺序工作流示例程序,见下图。



2.之后,系统自动打开工作流设计器界面,如图所示。



3. 从工具箱中依次拖动Code,Delay,Code三个活动到图中右侧的汉字提示处,得到如图所示的情形。



此时,图中的三个活动相关参数都没有经过设置,下面将设置有关参数。

为活动创建事件或属性

4.
对于Code活动来说,它相当于普通程序流程图中的一段代码模块。因此,我们可以进入到此活动的ExecuteCode事件中输入相应代码即可。为此,只
要双击图中的图标”codeActivity1“,系统控制转到文件Workflow1.cs中此活动的ExecuteCode事件代码处:

namespace CodeAndDelay

{

public sealed partial class Workflow1 : SequentialWorkflowActivity

{

public Workflow1()

{

InitializeComponent();

}

private void codeActivity1_ExecuteCode(object sender, EventArgs e)

{

//......等待输入你的定制代码

}

}

}

创建如下简单代码:

private void codeActivity1_ExecuteCode(object sender, EventArgs e)

{

Console.WriteLine("\n这里是活动一的执行代码,当前时间为{0}。",DateTime.Now );

}

5. 对于活动codeActivity2,也按上述过程操作,并创建类似于下面的代码:

private void codeActivity2_ExecuteCode(object sender, EventArgs e)

{

Console.WriteLine("\n这里是活动二的执行代码,当前时间为{0}。", DateTime.Now);

}

6. 切换到工作流设计器界面,然后单击选择延迟活动图标。在属性窗口中设置属性TimeoutDuration的值为00:00:05(”时:分:秒“格式)。
因为延迟活动仅仅实现一段时间延迟功能,所以,这个活动是非常容易理解的。

至此,完成了整个工作流部分的设计工作。非常直观简单!最后,别忘记把上面文件保存一下。

最后,我们来看一下控制台主程序是如何创建工作流实例,并启动工作流执行的。切换到控制台主程序Program.cs。此时,系统已经为我们自动生成了如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;

namespace CodeAndDelay
{
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(CodeAndDelay.Workflow1));
instance.Start();

waitHandle.WaitOne();
}

//......在此经常执行一些工作流执行后的善后工作

}
}
}

注意:有关上面代码中AutoResetEvent事件等的详细讨论将在后续文章中介绍。

观察运行结果

按F5运行控制台程序,一般顺利的话,将得到如下图所示运行时快照。



完全合乎意料的结果,一切尽在不言中!

备注(FROM MSDN)

DelayActivity活动有一个InitializeTimeoutDuration 事件,它发生在在超时持续时间开始之前发生。对于此事件,微软的建议是:不应使用此事件来设置
DelayActivity 的
TimeoutDuration。而应在工作流的 InitializeComponent 方法中设置超时持续时间。本文出自 “青峰” 博客,请务必保留此出处http://zhuxianzhong.blog.51cto.com/157061/203300
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: