什么是工作流呢?这是个比较宽泛的概念,程序都有一个流程,代码也有个序列,只有按照正确有序的序列执行时,才会得到预期的结果。这其实就是工作流,也许我们并没有考虑过在工作使用,但事实上我们已经在无意识的使用了。
工作流是一种不同于传统方式的变成模型,它将工作内容与工作时间,业务逻辑和控制流分离。这就使得更改工作时间并不影响工作内容,定制控制流,并不影响业务逻辑。以前我们是把业务逻辑和执行流都混杂到一段代码,很可能牵一发而动全身。
以上比较抽象的介绍了工作流,下面先介绍一个简单的示例,可以有个直观的了解。遵循新技术的传统,还是从“Hello World ”写起。如果已经有WF的编程经验,直接略过。
首先,新建项目,选择 “Workflow”->“顺序工作流控制台应用程序”,命名为SequentialWorkflowConsole。在新生成的项目中我们会看到“Workflow1.cs”.
双击打开,进入工作流设计器。
从“工具箱”中 Windows Workflow v3.0中添加“Code”
双击“codeActivity1”图标,进入后台事件,添加codeActivity1_ExecuteCode代码。这步就是给活动codeActivity1添加执行的操作,即事件codeActivity1_ExecuteCode。
现在,整个工作流基本上已经完成了。但是这是个控制台程序,没有界面,运行会发现,一闪而过,看不出效果,下面我们添加两行。
找到programe.cs,双击打开,进入后台代码
下面简单介绍下,后续章节会详细介绍。
1、WorkflowRuntime工作流运行时引擎,监视和控制工作流。
2、AutoResetEvent:
AutoResetEvent(bool initialState):释放单个等待线程的线程同步类。
false:无信号,子线程的WaitOne方法不会被自动调用
true:有信号,子线程的WaitOne方法会被自动调用
方法:
Reset ():将事件状态设置为非终止状态,导致线程阻止;如果该操作成功,则返回true;否则,返回false。
Set ():将事件状态设置为终止状态,允许一个或多个等待线程继续;如果该操作成功,则返回true;否则,返回false。
WaitOne() 当在派生类中重写时,阻止当前线程,直到当前的 WaitHandle 收到信号。
3、WorkflowRuntime工作流实例。
4、waitHandle.WaitOne() 主线程等待,直到接收到Set()信号,这里Set()在工作流事件完成或终止事件中。
现在可以运行下,O了。很简单,效果图我就不贴了。