public virtual void Dispose(bool disposing)
 {
     Stop();
     if (_sequenceEnumerator != null)
     {
         _sequenceEnumerator.Dispose();
         _sequenceEnumerator = null;
     }
     _DisposeSequenceExecutor();
     GC.SuppressFinalize(this);
 }
        public void Start()
        {
            if (Program == null)
            {
                throw new Exception("No program has been specified");
            }
            if (_state == RunState.Stopped)
            {
                _sequenceEnumerator = new QueuingSequenceEnumerator(Program);

                OnProgramStarted();

                // There are no sequences or there was a problem.
                // The end of a sequence normally triggers the ProgramEnded event.
                _NextSequence(_ProgramEnded);
            }
        }