• 【代码保留】WorkflowRuntimeFactory


    由于工作流运行时WorkflowRuntime在一个应用程序域中只允许存在一个实例,因此可以用单件Singleton模式来限制,并可以用工厂模式来调用,另者由于运行时需要有Start和Stop,因此也可以在工厂内添加相应的方法来启动和关闭WorkflowRuntime.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Workflow.Runtime;

    namespace WorkflowHost
    {
        
    public static class WorkflowFactory
        {
            
    //Singleton instance of the workflow runtime.
            private static WorkflowRuntime _workflowRuntime = null;
            
    //Lock (sync)object.
            private static object _syncRoot = new object();

            
    //Factory method.
            public static WorkflowRuntime GetWorkflowRuntime()
            { 
                
    //Lock execution thread in case of multi-threaded
                
    //(concurrent) access.
                lock (_syncRoot)
                { 
                    
    //Check for startup condition.
                    if (null == _workflowRuntime)
                    {
                        
    //Provide for shutdown
                        AppDomain.CurrentDomain.ProcessExit += new EventHandler(StopWorkflowRuntime);
                        AppDomain.CurrentDomain.DomainUnload 
    += new EventHandler(StopWorkflowRuntime);
                        
    //Not started, so create instance.
                        _workflowRuntime = new WorkflowRuntime();
                        
    //Start the runtime.
                        _workflowRuntime.StartRuntime();
                    }
    //if

                    
    //Return singleton instance.
                    return _workflowRuntime;
                }
    //lock
            }

            
    //Shutdown method
            static void StopWorkflowRuntime(object sender, EventArgs e)
            {
                
    if (_workflowRuntime != null)
                {
                    
    if (_workflowRuntime.IsStarted)
                    {
                        
    try
                        {
                            
    //Stop the runtime
                            _workflowRuntime.StopRuntime();
                        }
                        
    catch (ObjectDisposedException)
                        { 
                            
    //Already disposed of, so ignore
                        }//catch
                    }//if
                }//if
            }
        }
    }
  • 相关阅读:
    设计模式的类型
    SQL介绍(1)
    MySQL(介绍1)
    MyBatis总结(1)
    使用SQLServer Profiler侦测死锁(转)
    SQL Server 数据库中关于死锁的分析
    Delphi内嵌汇编语言BASM精要(转帖)
    Delphi项目构成之单元文件PAS
    Delphi中Interface接口的使用方法
    Delphi项目构成之项目文件DPR
  • 原文地址:https://www.cnblogs.com/volnet/p/931843.html
Copyright © 2020-2023  润新知