在宿主中使用参数与实例通信

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

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

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

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

例子源码:例_参数Parameter

工作流设计如下:
Parameter.JPG

工作流代码
ExpandedBlockStart.gif ContractedBlock.gif Public   Class Workflow1 class Workflow1
InBlock.gif    
Inherits SequentialWorkflowActivity
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Public Sub New()Sub New()
InBlock.gif        
MyBase.New()
InBlock.gif        InitializeComponent()
ExpandedSubBlockEnd.gif    
End Sub

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

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

ExpandedSubBlockStart.gifContractedSubBlock.gif    
Public Enum 年龄状况Enum 年龄状况 '年龄状况枚举,年龄类型属性的值
InBlock.gif
        成年
InBlock.gif        未成年
ExpandedSubBlockEnd.gif    
End Enum

ExpandedSubBlockStart.gifContractedSubBlock.gif    
Public Property 年龄类型()Property 年龄类型() As 年龄状况 '属性
InBlock.gif
        Get
InBlock.gif            年龄类型
= 年龄类型_value
InBlock.gif        
End Get
InBlock.gif        
Set(ByVal value As 年龄状况)
InBlock.gif            年龄类型_value 
= value
InBlock.gif        
End Set
ExpandedSubBlockEnd.gif    
End Property

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

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

ExpandedBlockEnd.gif
End Class

None.gif
 

宿主代码


ExpandedBlockStart.gif ContractedBlock.gif Class Program Class Program
InBlock.gif    
Shared WaitHandle As New AutoResetEvent(False)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Shared Sub Main()Sub Main()
InBlock.gif        Console.Write(
"请输入年龄:")
InBlock.gif        
Dim nl As Integer = Convert.ToInt32(Console.ReadLine())
InBlock.gif        Using workflowRuntime 
As New WorkflowRuntime()
InBlock.gif            
AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted
InBlock.gif            
AddHandler workflowRuntime.WorkflowTerminated, AddressOf OnWorkflowTerminated
InBlock.gif
InBlock.gif
InBlock.gif            
'-------------定义Dictionary类型,传参用------------------------------
InBlock.gif
            Dim 参数As System.Collections.Generic.Dictionary(Of StringObject)
InBlock.gif            参数
= New System.Collections.Generic.Dictionary(Of StringObject)()
InBlock.gif            参数.Add(
"年龄", nl)
InBlock.gif
InBlock.gif            
'参数.Add("名", 值)  '可添加多个
InBlock.gif
            '----------------------------------------------------------------------
InBlock.gif

InBlock.gif            
Dim workflowInstance As WorkflowInstance
InBlock.gif
InBlock.gif            
'使用CreateWorkflow方法带传参的重载
InBlock.gif
            workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1), 参数)
InBlock.gif
InBlock.gif            workflowInstance.Start()
InBlock.gif            WaitHandle.WaitOne()
InBlock.gif        
End Using
InBlock.gif
InBlock.gif        Console.Read()
ExpandedSubBlockEnd.gif    
End Sub

InBlock.gif
InBlock.gif    
'完成时的回调
ExpandedSubBlockStart.gifContractedSubBlock.gif
    Shared Sub OnWorkflowCompleted()Sub OnWorkflowCompleted(ByVal sender As ObjectByVal e As WorkflowCompletedEventArgs)
InBlock.gif
InBlock.gif        
'e.OutputParameters可以从工作流中将属性值取出
InBlock.gif

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

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

InBlock.gif
ExpandedBlockEnd.gif
End Class

None.gif


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值