예제 #1
0
        public Nullable <DateTime> Step()
        {
            IsStarted = true;
            if (Stacks.Count == 0)
            {
                IsCompleted = true;
                return(null);
            }
            ExecStackItem current = Stacks.Peek();

            if (!current.HasMoreExecution)
            {
                return(EndCall(current));
            }
            object            execution;
            ExecutionCallback callback;

            current.HasMoreExecution = (current.Execution.PopStack(out execution, out callback, current.Environment));
            //Console.WriteLine("current is " + execution);
            if (execution is Execution2)
            {
                Execution2           exec = execution as Execution2;
                ExecutionEnvironment e    = exec.StartCall(current.Environment);
                Stacks.Push(new ExecStackItem(exec, callback, e, current.Environment));
            }
            else
            {
                return(EndCall(current));
            }

            return(null);
        }
예제 #2
0
 public ExecStackItem(Execution2 exec, ExecutionCallback callback, ExecutionEnvironment env, ExecutionEnvironment preEnv)
 {
     Execution        = exec;
     Callback         = callback;
     Environment      = env;
     HasMoreExecution = true;
     Previous         = preEnv;
 }
예제 #3
0
        public RunThread(Instance instance, EventHandler fun, Event e, ExecutionEnvironment environment)
        {
            Instance    = instance;
            fun.Event   = e;
            IsStarted   = false;
            IsCompleted = false;
            Stacks      = new Stack <ExecStackItem>();
            Execution2 exe = fun as Execution2;

            Environment = new ExecutionEnvironment(environment, instance);

            ExecutionEnvironment env = exe.StartCall(Environment);

            Stacks.Push(new ExecStackItem(exe, FinishCallback, env, Environment));
        }