zoukankan      html  css  js  c++  java
  • 在宿主中使用参数与实例通信

     1.很多时候,宿主要与工作流实例的内部对象进行通信,比如启动时,要设定某些属性的值,完成时要读取某些属性的值。

    本例中是使用CreateWorkflow(工作流, 参数)的方式,在创建工作流时,对工作流的[年龄]属性赋值

    当工作流实例无成后,在OnWorkflowCompleted事件的WorkflowCompletedEventArgs参数中将属性值读出

    2.宿主与实例的通信还可以通过[外部事件][持久化]等方式实现,另外也可自已设计通信信道。

    例子源码:_参数Parameter

    工作流设计如下:


    工作流代码
    Public class Workflow1
        
    Inherits SequentialWorkflowActivity
        
    Public Sub New()
            
    MyBase.New()
            InitializeComponent()
        
    End Sub


        
    '------------------------年龄属性----------------------------------
        Private 年龄_value As Integer  '存值变量
        Public Property 年龄() As Integer '属性
            Get
                年龄
    = 年龄_value
            
    End Get
            
    Set(ByVal value As Integer)
                年龄_value 
    = value
            
    End Set
        
    End Property


        
    '------------------------年龄类型属性------------------------------
        Private 年龄类型_value As 年龄状况  '存值变量

        
    Public Enum 年龄状况 '年龄状况枚举,年龄类型属性的值
            成年
            未成年
        
    End Enum

        
    Public Property 年龄类型() As 年龄状况 '属性
            Get
                年龄类型
    = 年龄类型_value
            
    End Get
            
    Set(ByVal value As 年龄状况)
                年龄类型_value 
    = value
            
    End Set
        
    End Property


        
    '------------------IfElse的两个分支----------------------
        '年龄>=18
        Private Sub code_t_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
            年龄类型
    = 年龄状况.成年
            Console.WriteLine(
    "年龄>=18的代码块,年龄:" & Me.年龄)
        
    End Sub

        
    '年龄<18
        Private Sub code_f_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
            年龄类型
    = 年龄状况.未成年
            Console.WriteLine(
    "年龄<18的代码块,年龄:" & Me.年龄)
        
    End Sub

    End Class

     

    宿主代码


    Class Program
        
    Shared WaitHandle As New AutoResetEvent(False)

        
    Shared Sub Main()
            Console.Write(
    "请输入年龄:")
            
    Dim nl As Integer = Convert.ToInt32(Console.ReadLine())
            Using workflowRuntime 
    As New WorkflowRuntime()
                
    AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted
                
    AddHandler workflowRuntime.WorkflowTerminated, AddressOf OnWorkflowTerminated


                
    '-------------定义Dictionary类型,传参用------------------------------
                Dim 参数As System.Collections.Generic.Dictionary(Of StringObject)
                参数
    = New System.Collections.Generic.Dictionary(Of StringObject)()
                参数.Add(
    "年龄", nl)

                
    '参数.Add("名", 值)  '可添加多个
                '----------------------------------------------------------------------

                
    Dim workflowInstance As WorkflowInstance

                
    '使用CreateWorkflow方法带传参的重载
                workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1), 参数)

                workflowInstance.Start()
                WaitHandle.WaitOne()
            
    End Using

            Console.Read()
        
    End Sub


        
    '完成时的回调
        Shared Sub OnWorkflowCompleted(ByVal sender As ObjectByVal e As WorkflowCompletedEventArgs)

            
    'e.OutputParameters可以从工作流中将属性值取出

            
    Dim value As String = e.OutputParameters("年龄类型").ToString()
            Console.WriteLine(
    "年龄类型: " + value)
            Console.WriteLine(e.OutputParameters(
    "年龄"))
            WaitHandle.Set()
        
    End Sub


        
    '出错时的回调
        Shared Sub OnWorkflowTerminated(ByVal sender As ObjectByVal e As WorkflowTerminatedEventArgs)
            Console.WriteLine(e.Exception.Message)
            WaitHandle.Set()
        
    End Sub


    End Class



  • 相关阅读:
    LeetCode第[84]题(Java):Largest Rectangle in Histogram(最大的矩形柱状图)
    LeetCode第[79]题(Java):Word Search(矩阵单词搜索)
    LeetCode第[78]题(Java):Subsets(求子集)扩展——第[90]题:Subsets 2
    关于SpringMVC中两种映射器不能共存的解决
    LeetCode第[73]题(Java):Set Matrix Zeroes(矩阵置0)
    php分页的实现
    PHP编码规范
    PHP常用函数
    PHP配置文件详解php.ini
    面向对象编程——parent—this
  • 原文地址:https://www.cnblogs.com/foundation/p/514869.html
Copyright © 2011-2022 走看看