zoukankan      html  css  js  c++  java
  • Windows Workflow Foundation实验01——Windows Workflow Foundation 快速入门(练习二)

    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应用程序来停止宿主程序和调试。
  • 相关阅读:
    HTTP断点续传 规格严格
    Java Shutdown 规格严格
    linux 命令源码 规格严格
    JTable调整列宽 规格严格
    linux 多CPU 规格严格
    Hello can not find git path 规格严格
    Kill 规格严格
    拜拜牛人 规格严格
    Swing 规格严格
    Debugging hangs in JVM (on AIX but methodology applicable to other platforms) 规格严格
  • 原文地址:https://www.cnblogs.com/zhangdong/p/1646524.html
Copyright © 2011-2022 走看看