本文内容来自
Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2
中的
HOL01
中的第二个练习,其中包括三个任务:
Ø
定义工作流的参数
Ø
修改
Code Activity
Ø
运行修改好的工作流
1
.打开上一个练习创建好的
HelloWorldWorkflow
项目,打开
Workflow1.xoml
顺序工作流文件,并转到查看代码。
2
.找到如下代码,然后在其中添加两个属性。
public partial class Workflow1 : SequentialWorkflowActivity
{
private void codeActivity1_CodeHandler(object sender, EventArgs e)
{
Console.WriteLine("Hello, World!");
}
}
在方法
codeActivity1_CodeHandler
下面打
“prop”
按
Tab
键,即可由
VS2005
自动生成属性的格式代码。
然后使用
Tab
键在绿色的区域中进行切换,,输入好后使用回车键即可转到代码下面,完成一个属性的定义。
这里定义两个属性,
FirstName
和
LastName
。
3
.因为例子需要控制台弹出一个
Windows
中的
MessageBox
消息提示框,所以添加
System.Windows.Forms
引用。
4
.修改
Code Activiity
实例的代码。
private void codeActivity1_CodeHandler(object sender, EventArgs e)
{
System.Windows.Forms.MessageBox.Show("Hello world: " + firstName + " " + lastName);
}
6
.删除其中的
Form1.cs
和
Program.cs
两个文件。
7
.在我们安装
HOL
的如下路径找到以下四个文件,使用添加现有项添加到
WinFormTestHost
项目中。
C:\Windows Workflow Foundation\Labs\Lab01\Resources\WinFormTestHost Files
8
.将
WinFormTestHost
项目设置为启动项目。
9
.查看
Form1.cs
其中的代码如下:
public partial class Form1 : Form
{
private WorkflowRuntime wr;
private string workflowAssembly = "";
private string workflowTypeName = "";
public Form1()
{
InitializeComponent();
workflowAssembly = "HelloWorldWorkflow";
workflowTypeName = "HelloWorldWorkflow.Workflow1";
}
private void btnStartWorkflow_Click(object sender, EventArgs e)
{
if (wr == null)
{
wr = new WorkflowRuntime();
wr.StartRuntime();
}
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("FirstName", txtFirstName.Text);
parameters.Add("LastName", txtLastName.Text);
WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);
instance.Start();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (wr != null)
{
if (wr.IsStarted)
{
wr.StopRuntime();
}
}
}
}
(
1
)运行工作流需要工作流运行时的支持,所以首先定义并实例化了一个
WorkflowRuntime
对象。然后使用这个对象的
StartRuntime
方法启动运行时。
(
2
)定义了
Dictionary
<string, object>
对象用来传递参数的数组。两个参数
FirstName
和
LastName
。界面如下:
(
3
)在往下就是创建工作流实例并执行工作流对象的代码了。
WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);
instance.Start();
(
4
)最后在窗口关闭的时候停止运行时。
10
.其中用到的工作流的对象和方法,所以我们要添加几个引用:
项目
HelloWorldWorkflow
的引用
System.Workflow.Activities.dll
System.Workflow.ComponentModel.dll
System.Workflow.Runtime.dll
三个程序集的应用。
至此完成第二个练习。
其中涉及到两个我自己不太明白的东东,准备查查
MSDN
放在下面:
Dictionary类
WorkflowRuntime.CreateWorkflow
方法
现在仅知道在顺序工作流类中建立属性后,可以通过这个方法,将参数放到
Dictionary
类中,创建工作流实例时给属性赋值。
MSDN
中的原文:
WorkflowRuntime.CreateWorkflow Method (Type, Generic Dictionary)
Creates a workflow instance by using the specified workflow Type and the arguments to the workflow contained in the specified Dictionary.
Namespace:
System.Workflow.Runtime
Assembly: System.Workflow.Runtime (in system.workflow.runtime.dll)
Assembly: System.Workflow.Runtime (in system.workflow.runtime.dll)
public
WorkflowInstance CreateWorkflow (
Type workflowType,
Dictionary namedArgumentValues
)
Parameters
workflowType
The Type of the workflow to create.
namedArgumentValues
A Dictionary of objects keyed by string that represents the arguments to the workflow.
Return Value
A WorkflowInstance object that represents the workflow instance created.
Exceptions
Exception type
|
Condition
|
ArgumentNullException
|
workflowType is a null reference (Nothing in Visual Basic).
|
参考资料:
Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2
WorkflowRuntime.CreateWorkflow Method (Type, Generic Dictionary)