WF随笔系列-开篇
(在文章底部贴了一些相关的WF的文章,仅大家参考)
今天呢,我主要是针对创建一个WF的简单应用,为向准备学WF同仁做一个开始。
好,让我们打开Vs2008 beat 2环境
在new project中对workflow六个Templates
1.Sequential Workflow Console Application
2. Sequential Workflow Library
这两个顺序工作流模板,1个是Application, 1个是Library
3. State Machine Workflow Console Application
4. State Machine Workflow Library
那两个针对于State Machine工作流模板,也是一个Application, 和Library.
5. Workflow Activity Library 创建工作流中活动组件的模板
6. Empty Workflow Project 这个就不多说了
首先
1.建立一个Windows Application Form project
2.建立一个Activity Library project
3.建立一个Workflow Library project
然后
一.Win Form Project的Form中放置一个button,即可
二.把原先Activity Library工程中生成Activity.cs 删除
重新Add 两个Activity ,一个为HelloActivtiy,一个为空的Activity
这样的话,我们就有两个自定义的Activity了。
嗯 在上图Templates中我们可以看到有两个Activity Templates
1个是普通的Activity 1个是 Activity (with code separation)
一个后缀名为CS,一个后缀名为Xoml(用xml形式来描述它)
那我们都知道在Workflow Foundation中间,我们可以直接的在运行时加载任何Xoml,然后实例出来相应的Workflow。
那建立完成HelloActivity.Xoml文件,在ToolBox中拖一个Code到Activity上面,此时会发现CodeActivity1右上方有一个红色的“ !”,为什么会这样的呢,是因为我们没有建立相应的方法。点击Properties,在ExecuteCode中,我们输入建立的方法名:DisplayHelloWorldWF,即可.
相应添加的代码:
{
MessageBox.Show("Hello WorkFlow");
}
嗯, 其实每个workflow, activity都是向上图的形式,事实上每个Workflow都视作和Activity等同,一个Activity和Workflow等同。至此,我们的Activity Library就建立完成,它会以xml形式进行存储,感兴趣的话,大家根据生成的XML,自己研究一下。
4.回到WorkFlowLibrary中来,我们添加一个WorkFlow.Xoml
这时大家可以发现,Activity还是Sequential建立出来都是顺序的activity,而且没有给我们选择是建立顺序的activity,还是状态机的activity。
那让我们来看,先让我们点中activity,来看property中的BaseClass,
在Base class中有一个是组合式的Activity(CompostieActivity),一个是普通的Activity,那一般来说都是组合式的。
在看System.WorkFlowActivites,在TypeName列表中有SequentialActivity,StateActivity;
那如果继承StateActivity的话,那出来的Activity就会是一个状态机的活动图了。嗯,那在后面讲有关于状态机的话题时在议吧。
5.我们编译一下Activity Library项目,编译之后,在Toolbox中会出现刚才我们建立的两个Activity 组件.
然后我们把Activity,拖到Sequential WorkFlow中,
此时会看到一个Lock(锁)。锁的意思表示,因为HelloWorldActity1是引用进来的,如果想修改的话,就要去相应的activity处去修改。
那在工作流中有三个视图:
1. View Cancel Handler
2. View Fault Handler
3. View SequentialWorkflow
cancel流程由用户操作发生的
fault工作流是由工作流本身发生错误之后触发的,所以一个工作流由三个流程组成.
最后,回到WinForm项目,编写Button事件
{
using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(SequentialWorkflowLibrary. SequentialWorkflow));
instance.Start();
}
}
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(SequentialWorkFlowConsoleDemo.Workflow1));
instance.Start();
waitHandle.WaitOne();
}
}
当然了,这段代码,其实是实现了一个阻塞的工作流,一旦这个工作流运行起来后,整个就会停在那里,等结束运行之后,才会出来。
还有就是UI的改变和workflow没有任何关系,相反workflow的状态改变会影响到UI。
好了,今天开篇就到这里。
注:
项目之间引用关系:
SequentialWorkFlowLibrary -->WorkFlowActivityLibrary
WindowsFormsApplication -->SequentialWokflowLibrary
-->System.WorkFlow.Activites
--->System.WorkFlow.ComponentModel
--->System.WorkFlow.Runtime
workflowActivityLibrary ---->WindowsForm
相关的WF的文章
http://dudu.cnblogs.com/archive/2005/11/18/279691.html
相关电子书(下载链接见文章底部,谢谢)
>>>>>>>WWF书下载<<<<<<<<