zoukankan      html  css  js  c++  java
  • 一个简单的态机模式工作流演示(2)(代码与实现)

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


        
    Public wxd_state As String = "wxd"
        
    Public wxd_i As Integer = 0
        
    Private Sub code1_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
            System.Console.WriteLine(
    "开始cood1结点代码")
            wxd_state 
    = "123"
            System.Console.WriteLine(
    "为wxd_state赋值:123")
            System.Console.WriteLine(
    "结束cood1结点代码")
        
    End Sub


        
    Private Sub code2_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
            System.Console.WriteLine(
    "开始cood2结点代码")

            System.Console.WriteLine(
    "如果wxd_state值为将执行该结点")
            System.Console.WriteLine(wxd_state)
            System.Console.WriteLine(
    "结束cood3结点代码")
        
    End Sub


     
        
    Private Sub code3_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
            System.Console.WriteLine(
    "开始cood3结点代码")

            System.Console.WriteLine(
    "如果wxd_state值不为将执行该结点")
            System.Console.WriteLine(wxd_state)
            System.Console.WriteLine(
    "结束cood3结点代码")
        
    End Sub


        
    Private Sub cood4_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
            
    Me.wxd_i = wxd_i + 1
            System.Console.WriteLine(wxd_i.ToString())
        
    End Sub

    End Class


    工作流的Partial部分(就与NET2中WinForm设计时的Partial部分一样)
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial 
    class Workflow1

        
    'NOTE: The following procedure is required by the Workflow Designer
        'It can be modified using the Workflow Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerNonUserCode()> _
        
    Private Sub InitializeComponent()
            
    Me.CanModifyActivities = True
            
    Dim ruleconditionreference1 As System.Workflow.Activities.Rules.RuleConditionReference = New System.Workflow.Activities.Rules.RuleConditionReference
            
    Dim ruleconditionreference2 As System.Workflow.Activities.Rules.RuleConditionReference = New System.Workflow.Activities.Rules.RuleConditionReference
            
    Me.code3 = New System.Workflow.Activities.CodeActivity
            
    Me.code2 = New System.Workflow.Activities.CodeActivity
            
    Me.cood4 = New System.Workflow.Activities.CodeActivity
            
    Me.ifElseBranchActivity2 = New System.Workflow.Activities.IfElseBranchActivity
            
    Me.ifElseBranchActivity1 = New System.Workflow.Activities.IfElseBranchActivity
            
    Me.setStateActivity1 = New System.Workflow.Activities.SetStateActivity
            
    Me.code1 = New System.Workflow.Activities.CodeActivity
            
    Me.delayActivity1 = New System.Workflow.Activities.DelayActivity
            
    Me.setStateActivity2 = New System.Workflow.Activities.SetStateActivity
            
    Me.whileActivity1 = New System.Workflow.Activities.WhileActivity
            
    Me.ifElseActivity1 = New System.Workflow.Activities.IfElseActivity
            
    Me.delayActivity2 = New System.Workflow.Activities.DelayActivity
            
    Me.eventDrivenActivity1 = New System.Workflow.Activities.EventDrivenActivity
            
    Me.eventDrivenActivity2 = New System.Workflow.Activities.EventDrivenActivity
            
    Me.wxd_initial = New System.Workflow.Activities.StateActivity
            
    Me.wxd_completed = New System.Workflow.Activities.StateActivity
            
    Me.wxd_node = New System.Workflow.Activities.StateActivity
            
    '
            'code3
            '
            Me.code3.Name = "code3"
            
    AddHandler Me.code3.ExecuteCode, AddressOf Me.code3_ExecuteCode
            
    '
            'code2
            '
            Me.code2.Name = "code2"
            
    AddHandler Me.code2.ExecuteCode, AddressOf Me.code2_ExecuteCode
            
    '
            'cood4
            '
            Me.cood4.Name = "cood4"
            
    AddHandler Me.cood4.ExecuteCode, AddressOf Me.cood4_ExecuteCode
            
    '
            'ifElseBranchActivity2
            '
            Me.ifElseBranchActivity2.Activities.Add(Me.code3)
            
    Me.ifElseBranchActivity2.Name = "ifElseBranchActivity2"
            
    '
            'ifElseBranchActivity1
            '
            Me.ifElseBranchActivity1.Activities.Add(Me.code2)
            ruleconditionreference1.ConditionName 
    = "Condition1"
            
    Me.ifElseBranchActivity1.Condition = ruleconditionreference1
            
    Me.ifElseBranchActivity1.Name = "ifElseBranchActivity1"
            
    '
            'setStateActivity1
            '
            Me.setStateActivity1.Name = "setStateActivity1"
            
    Me.setStateActivity1.TargetStateName = "wxd_node"
            
    '
            'code1
            '
            Me.code1.Name = "code1"
            
    AddHandler Me.code1.ExecuteCode, AddressOf Me.code1_ExecuteCode
            
    '
            'delayActivity1
            '
            Me.delayActivity1.Name = "delayActivity1"
            
    Me.delayActivity1.TimeoutDuration = System.TimeSpan.Parse("00:00:00")
            
    '
            'setStateActivity2
            '
            Me.setStateActivity2.Name = "setStateActivity2"
            
    Me.setStateActivity2.TargetStateName = "wxd_completed"
            
    '
            'whileActivity1
            '
            Me.whileActivity1.Activities.Add(Me.cood4)
            ruleconditionreference2.ConditionName 
    = "Condition2"
            
    Me.whileActivity1.Condition = ruleconditionreference2
            
    Me.whileActivity1.Name = "whileActivity1"
            
    '
            'ifElseActivity1
            '
            Me.ifElseActivity1.Activities.Add(Me.ifElseBranchActivity1)
            
    Me.ifElseActivity1.Activities.Add(Me.ifElseBranchActivity2)
            
    Me.ifElseActivity1.Name = "ifElseActivity1"
            
    '
            'delayActivity2
            '
            Me.delayActivity2.Name = "delayActivity2"
            
    Me.delayActivity2.TimeoutDuration = System.TimeSpan.Parse("00:00:00")
            
    '
            'eventDrivenActivity1
            '
            Me.eventDrivenActivity1.Activities.Add(Me.delayActivity1)
            
    Me.eventDrivenActivity1.Activities.Add(Me.code1)
            
    Me.eventDrivenActivity1.Activities.Add(Me.setStateActivity1)
            
    Me.eventDrivenActivity1.Name = "eventDrivenActivity1"
            
    '
            'eventDrivenActivity2
            '
            Me.eventDrivenActivity2.Activities.Add(Me.delayActivity2)
            
    Me.eventDrivenActivity2.Activities.Add(Me.ifElseActivity1)
            
    Me.eventDrivenActivity2.Activities.Add(Me.whileActivity1)
            
    Me.eventDrivenActivity2.Activities.Add(Me.setStateActivity2)
            
    Me.eventDrivenActivity2.Name = "eventDrivenActivity2"
            
    '
            'wxd_initial
            '
            Me.wxd_initial.Activities.Add(Me.eventDrivenActivity1)
            
    Me.wxd_initial.Name = "wxd_initial"
            
    '
            'wxd_completed
            '
            Me.wxd_completed.Name = "wxd_completed"
            
    '
            'wxd_node
            '
            Me.wxd_node.Activities.Add(Me.eventDrivenActivity2)
            
    Me.wxd_node.Name = "wxd_node"
            
    '
            'Workflow1
            '
            Me.Activities.Add(Me.wxd_node)
            
    Me.Activities.Add(Me.wxd_completed)
            
    Me.Activities.Add(Me.wxd_initial)
            
    Me.CompletedStateName = "wxd_completed"
            
    Me.DynamicUpdateCondition = Nothing
            
    Me.InitialStateName = "wxd_initial"
            
    Me.Name = "Workflow1"
            
    Me.CanModifyActivities = False

        
    End Sub

        
    Private WithEvents whileActivity1 As System.Workflow.Activities.WhileActivity
        
    Private WithEvents cood4 As System.Workflow.Activities.CodeActivity
        
    Private WithEvents setStateActivity2 As System.Workflow.Activities.SetStateActivity
        
    Private WithEvents delayActivity2 As System.Workflow.Activities.DelayActivity
        
    Private WithEvents ifElseBranchActivity2 As System.Workflow.Activities.IfElseBranchActivity
        
    Private WithEvents ifElseBranchActivity1 As System.Workflow.Activities.IfElseBranchActivity
        
    Private WithEvents ifElseActivity1 As System.Workflow.Activities.IfElseActivity
        
    Private WithEvents code3 As System.Workflow.Activities.CodeActivity
        
    Private WithEvents code2 As System.Workflow.Activities.CodeActivity
        
    Private WithEvents wxd_completed As System.Workflow.Activities.StateActivity
        
    Private WithEvents wxd_node As System.Workflow.Activities.StateActivity
        
    Private WithEvents eventDrivenActivity1 As System.Workflow.Activities.EventDrivenActivity
        
    Private WithEvents eventDrivenActivity2 As System.Workflow.Activities.EventDrivenActivity
        
    Private WithEvents setStateActivity1 As System.Workflow.Activities.SetStateActivity
        
    Private WithEvents delayActivity1 As System.Workflow.Activities.DelayActivity
        
    Private WithEvents code1 As System.Workflow.Activities.CodeActivity
        
    Private WithEvents wxd_initial As System.Workflow.Activities.StateActivity
    End Class


    宿主程序,就是一个控制台程序,在这里运行工作流

      添加一入口类,将工程设为控制台输出
    Imports System
    Imports System.Collections.Generic
    Imports System.Text
    Imports System.Threading
    Imports System.Workflow.Runtime
    Imports System.Workflow.Runtime.Hosting

    Public Class begin

        
    Shared WaitHandle As New AutoResetEvent(False)

        
    Shared Sub Main()
            Console.WriteLine(
    "开始")
            Using workflowRuntime 
    As New WorkflowRuntime()

                
    '完成时事件
                AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted

                
    '出错时事件
                AddHandler workflowRuntime.WorkflowTerminated, AddressOf OnWorkflowTerminated

                
    Dim workflowInstance As WorkflowInstance
                workflowInstance 
    = workflowRuntime.CreateWorkflow(GetType(Workflow1))

                workflowInstance.Start() 
    '开始
                WaitHandle.WaitOne()    '等待,阻塞进程

            
    End Using
            Console.WriteLine(
    "完成")
            Console.ReadLine()
        
    End Sub


        
    '完成时事件
        Shared Sub OnWorkflowCompleted(ByVal sender As ObjectByVal e As WorkflowCompletedEventArgs)
            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






  • 相关阅读:
    前端代码规范
    node服务通过Jenkins上线流程
    移动端常用布局方法
    前端工程化
    前端开发辅助
    前端Node项目发布流程
    观list.clear()方法 有感
    数据导出 写入到excle文件
    tomcat内存使用情况
    三种分布式锁 简易说说(包含前一篇提到的redis分布式锁)
  • 原文地址:https://www.cnblogs.com/foundation/p/515621.html
Copyright © 2011-2022 走看看