Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <see cref="IScriptExecutor.Execute(IEnumerable{char}, bool, bool)" />
        public IScriptExecutionContext Execute(IEnumerable <char> src,
                                               bool autoStart,
                                               bool debug)
        {
            lock (this._SYNC)
            {
                this.ThrowIfDisposed();

                ScriptExecutionContext result = new ScriptExecutionContext();
                result.Executor = this;
                result.Source   = StringHelper.AsString(src);
                result.IsDebug  = debug;

                result.StartAction = delegate()
                {
                    OnExecuteContext onExecCtx = new OnExecuteContext();
                    try
                    {
                        onExecCtx.IsDebug = result.IsDebug;
                        onExecCtx.Source  = result.Source;

                        onExecCtx.StartTime = DateTimeOffset.Now;
                        this.OnExecute(onExecCtx);
                    }
                    finally
                    {
                        result.Result = onExecCtx.ScriptResult;
                    }
                };

                if (autoStart)
                {
                    result.Start();
                }

                return(result);
            }
        }