惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Help Net Security
MyScale Blog
MyScale Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
Vercel News
Vercel News
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
云风的 BLOG
云风的 BLOG

博客园 - zhangdong

软件架构和设计 在Visual Studio 2010中定义GDI+自定义控件——自定义控件介绍 Visual Studio 2010 Team System 动手实验室——架构师工具 Visual Studio 2010 Team System 动手实验室 Silverlight 框架 .NET Framework 3.5 Silverlight 的发展之路 Microsoft Exchange Server 2010 介绍 Silverlight 3 —— 介绍 搭建基于MOSS的团队解决方案01——Microsoft Office SharePoint 2007 Server快速入门(Continued) 搭建基于MOSS的团队解决方案01——Microsoft Office SharePoint 2007 Server快速入门 Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习四) Windows Workflow Foundation 实验01 —— Windows Workflow Foundation 快速入门(练习三) Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习一) Windows Workflow Foundation实验——安装与准备 使用.NET平台工具操作Live Framework 地图控件快速入门——控制地图 地图控件快速入门 - zhangdong - 博客园 WCF中的管道——管道类型
Windows Workflow Foundation实验01——Windows Workflow Found...
zhangdong · 2010-01-13 · via 博客园 - zhangdong
  1. 练习二 —— 使用参数向工作流中接收数据

这个练习中,你会修改我们在上面创建的工作流,使它在运行起来后,可以向内部接收数据。你还可以在Code活动中修改代码来显示输入的数据值。最后,你会将我们上个练习中的项目,改为一个Windows窗体宿主程序。它可以允许我们输入值,并创建一个我们自己的工作流示例。

注意:当工作流运行起来后,有两个接收数据的方法。他们是参数和事件。如果使用参数,工作流必须使用一个包含参数名和参数类型定义的列表。这些参数会在宿主陈故乡启动一个新的工作流实例后,传递近来。如果使用事件,工作流作者会加入一个可以接收事件和事件相关数据的活动。事件由宿主定义,而且一个自定义的活动会被用来处理事件响应。我们将会在这个练习中使用参数,而在练习三中会使用基于事件的活动。

任务1 —— 为工作流定义参数
  1. 在解决方案资源管理器中双击Workflow1.xoml文件,以打开Visual Studio 工作流设计视图。
  2. 在工作流设计视图中右键单击背景,选择代码视图,或在菜单中选择视图|代码。
  3. 进入Workflow1类中,加入一个字符串类型的字段:firstName,并将它重构为一个属性。如下代码:
       1:  private string firstName;
       2:   
       3:  public string FirstName
       4:  {
       5:      get { return firstName; }
       6:      set { firstName = value; }
       7:  }
  4. 使用相同的方法再加入另一个属性:LastName。如下代码:
       1:  private string lastName;
       2:   
       3:  public string LastName
       4:  {
       5:      get { return lastName; }
       6:      set { lastName = value; }
       7:  }
任务2 —— 修改代码活动
  1. 在这个练习中,我们会使用一个Windows窗体应用程序作为工作流的宿主。因此我们想要从工作流中显示一个消息框,我们就需要添加一个指向Windows窗体的引用。选择项目|添加引用。
  2. 在添加引用对话框的.NET选项卡中,从列表中选择System.Windows.Forms并点击OK按钮。  clip_image002
  3. 在解决方案管理器中右键单击Workflow1.xoml.cn文件。选择察看代码。此时就会导航到Workflow1.xoml.cs源文件中的codeActivity1_CodeHandler。这个方法就是代码活动的处理方法。
  4. 修改codeActivity1_CodeHandler方法中的代码,来获得参数值,并且显示用一个消息框显示FirstName和LastName的值。
       1:  private void codeActivity1_CodeHandler(object sender, EventArgs e)
       2:  {
       3:      //Console.WriteLine("Hello,World!");
       4:      System.Windows.Forms.MessageBox.Show("Hello World: " + FirstName + " " + LastName);
       5:  }
任务3 —— 运行修改后的工作流

现在我们准备测试修改后的工作流。和我们在练习一中使用控制台应用程序不同的是,在这里我们添加一个Windows窗体应用程序和一些预定义的代码作为我们工作流的宿主。

  1. 在Visual Studio中,选择文件|新建|新项目菜单,向打开的HelloWorldWorkflow解决方案中添加一个新的项目:WinFormTestHost。image
  2. 右键单击刚刚建立的WinFormTestHost项目,选择设为启动项目菜单。
  3. 按照如下界面设计窗体。其中,窗体的显示文本为“Hello World Workflow”。两个文本框的ID分别为txtFirstName和txtLastName。按钮的ID为btnStartWorkflow。调整文本框的宽度为150。调整按钮的宽度为100。调整窗体的高度为120。           image
  4. 现在我们要确认WinFormTestHost应用程序可以使用新的工作流。在解决方案资源管理器中右键单击WinFormTestHost的引用文件夹,选择添加引用,添加HelloWorldWorkflow项目的引用。
  5. 在添加引用对话框中,选择项目选项卡。
  6. 在列表中选择HelloWorldWorkflow项目,点击OK关闭对话框。然后再添加新的引用。image
  7. 我们还需要确认WinFormTestHost已经包含Windows Workflow Foundation系统的程序集。在解决方案资源管理器中右键单击WinFormTestHost项目的引用文件夹,选择添加引用。
  8. 在添加引用对话框中,选择.NET选项卡,滑动到下方,并选择如下图所示实体。 clip_image002[3]
  9. 在解决方案资源管理器中,右键单击Workflow1.xoml文件,选择查看代码,来打开工作流的Code-Beside类。
  10. 设置一个断点在codeActivity1_CodeHandler方法上。
  11. 在解决方案中,右键单击Form1.cs文件,选择查看代码,来打开窗体的code-beside代码。
  12. 在Using区域,添加如下代码,来引用工作流系统程序集。
       1:  using System.Workflow.ComponentModel;
       2:  using System.Workflow.Runtime;
       3:  using System.Workflow.Runtime.Hosting;
  13. 在Form1类中添加三个私有变量,如下所示:
       1:  private WorkflowRuntime wr;
       2:  private string workflowAssembly = "";
       3:  private string workflowTypeName = "";
  14. 在Form1的构造函数中,初始化工作流的程序集名和工作流的类别名。将如下代码添加到构造函数中:
       1:  workflowAssembly = "HelloWorldWorkflow";
       2:  workflowTypeName = "HelloWorldWorkflow.Workflow1";
  15. 在Form1中,为窗体添加关闭事件处理程序。切换到设计视图,右键单击窗体,选择属性。在属性窗口中选择事件按钮。此时切换到了事件列表。在行为组中找到FormClosed事件并双击。此时在Form1窗体的Code-beside代码中自动生成了Form1_FormClosed事件处理程序。按照如下代码所示编写Form1_FormClosed事件处理:
       1:  private void Form1_FormClosed(object sender, FormClosedEventArgs e)
       2:  {
       3:      if (wr != null)
       4:      {
       5:          if (wr.IsStarted)
       6:          {
       7:              wr.StopRuntime();
       8:          }
       9:      }
      10:  }
  16. 接下来,需要为按钮添加启动工作流、传递参数的代码。返回设计视图,双击btnStartWorkflow按钮。此时,在Form1窗体的Code-beside代码中会自动生成btnStartWorkflow_Click事件代码。按照如下代码编写btnStartWorkflow_Click事件处理的实现:
       1:  private void btnStartWorkflow_Click(object sender, EventArgs e)
       2:  {
       3:      if (wr == null)
       4:      {
       5:          wr = new WorkflowRuntime();
       6:          wr.StartRuntime();
       7:      }
       8:      Dictionary<string, object> parameters = new Dictionary<string, object>();
       9:      parameters.Add("FirstName", txtFirstName.Text);
      10:      parameters.Add("LastName", txtLastName.Text);
      11:   
      12:      WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);
      13:      instance.Start();
      14:  }
  17. 按F5,编译并运行解决方案,或者选择调试|开始调试菜单命令。
  18. WinFormTestHost应用程序将会运行,并显示包含输入First和Last Name的字段。
  19. 在两个文本框中分别输入First Name 和 Last Name。
  20. 单击Start Workflow按钮来实例化一个HelloWorldWorkflow.Workflow1的新实例。并将FirstName 和LastName值作为参数传递到工作流中。image
  21. Visual Studio 将会中断调试到codeActivity1_CodeHandler方法。选择调试|继续调试菜单可以继续运行工作流。clip_image002[5]
  22. 当Code活动完成运行后,你会看到一个消息框,显示出了作为参数传递到工作流中的FirstName和LastName两个值。                 image
  23. 关闭WinFormTestHost应用程序来停止宿主程序和调试。