使用C#代码来创建WF应用程序
1:创建ConsoleApplication项目:
创建一个控制台项目,命名为HelloCodeWorkflow.
2: 添加对System.Activities程序集的引用
默认的,一个新的控制台程序并不会应用System.Activities程序集。
3:编写定义Workflow的代码。
using System.Activities;
using System.Activities.Statements;
namespace HelloCodeWorkflow {
class Program {
static void Main(string[] args) {
WorkflowInvoker.Invoke(new HelloWorkflow());
}
}
public class HelloWorkflow:Activity {
public HelloWorkflow() {
this.Implementation = () => new Sequence {
Activities = {
newWriteLine(){Text="Hello Workflow"}
}
};
}
}
}
4:运行它:
设置HelloCodeWorkflow作为启动项目,按Ctrl+F5,和期望的一样,结果和前面的结果一样。
它是怎么工作的。。。
我们使用下面的命名空间:
using System.Activities;
using System.Activities.Statements;
因为WorkflowInvoker类属于System.Activities命名空间,Sequence活动,WriteLine活动属于System.Activities.Statements命名空间。
public class HelloWorkflow:Activity {
public HelloWorkflow() {
this.Implementation = () => new Sequence {
Activities = {
newWriteLine(){Text="Hellow Workflow"}
}
};
}
}
通过实现继承自Activity的一个类,我们通过C#代码定义了Workflow。
WorkflowInvoker.Invoke(s);
上面的代码加载了一个工作流实例,并且自动的运行它,WorkflowInvoker.Invoke方法是同步的,这也就是说它使用调用者的线程来执行workflow.
还有更多。。
WF4 也提供了一个类DynamicActivity,通过它我们可以在运行时动态的来定义工作流实例,换句话说,通过使用DynamicActivity,我们没有必要在工作流的初始化之前就定义工作流。下面是一些样例代码:
public static DynamicActivity GetWF() {
return new DynamicActivity() {
Implementation = () => new Sequence() {
Activities ={
newWriteLine(){Text="Hello Workflow"}
}
}
};
}
使用InArguments 来初始化WF程序。
在这个任务中,我们创建一个可以接收参数的工作流程序,我们使用InArguments来定义工作流需要的参数。
创建工作流程序
1:创建工作流程序:
创建一个新的工作流控制台程序,命名为UseInArgument
2:制作WF程序。
在这里定义了工作流需要的两个参数,参数的方向是In(输入).类型是String.
接着使用WriteLine方法输出这两个参数。
3:编写代码启动工作流。
修改Program.cs 代码如下:
using System.Activities;
using System.Activities.Statements;
namespace UseInArgument {
class Program {
static void Main(string[] args) {
WorkflowInvoker.Invoke(new Workflow1()