zoukankan      html  css  js  c++  java
  • 【代码保留】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
            }
        }
    }
  • 相关阅读:
    java执行构造器和初始化字段的顺序
    java语言中的varargs
    对Java语言的byte类型变量进行无符号提升
    VisualStudio 切换帐号 (原帐号已过期且无法登录时用)
    C/C++ 的关系运算符采用短路运算
    实现std::string的ltrim、rtrim和trim方法
    Excel 用于批量把单元格设置为"文本格式保存的数字"的宏
    为什么要用webUI?
    CEF3中js调用delphi内部方法
    2016-1-1最新版本的linphone-android在mac上编译通过,同时建立了IDEA工程
  • 原文地址:https://www.cnblogs.com/volnet/p/931843.html
Copyright © 2011-2022 走看看