/// <summary>
        /// Запускает программы с возможностью параллельного выполнения.
        /// </summary>
        /// <param name="programms">Программы для ПМБР.</param>
        public void StartParallel(RegisterProgramCollection programs)
        {
            if (programs == null)
                throw new ArgumentNullException("Коллекция программ не может быть неопределенной");
            if (programs.Count == 0)
                throw new ArgumentException("Коллекция программ не может быть пустой");
            if (_manager != null)
                throw new Exception("ПМБР уже запущена");

            _manager = new RegisterThreadManager(_registers, programs);
            _manager.BreakPoints = _breakPoints;
            _manager.OnComplete += _manager_OnComplete;
            _manager.ValueOut += _manager_ValueOut;
            _manager.ValueIn += _manager_ValueIn;
            _manager.StepCompleted += _manager_StepCompleted;
            _manager.BreakPointReached += _manager_BreakPointReached;
            _manager.RunEntryPoint(programs.GetEntry().Id);
        }
        /// <summary>
        /// Запускает классическую МБР в режиме пошагового выполнения.
        /// </summary>
        /// <param name="ops">Список операций для выполнения.</param>
        public void StartManual(List<Operation> ops)
        {
            if (ops == null)
                throw new ArgumentNullException("Коллекция операций не может быть неопределенной");
            if (ops.Count == 0)
                throw new ArgumentException("Коллекция операций не может быть пустой");
            if (_manager != null)
                throw new Exception("МБР уже запущена");

            RegisterProgram mainProg = new RegisterProgram(ops.Cast<RegisterOperation>().ToList().ToArray(), 0, "classic", true);
            RegisterProgramCollection programs = new RegisterProgramCollection();
            programs.Add(mainProg);
            _manager = new RegisterThreadManager(_registers, programs);
            _manager.BreakPoints = _breakPoints;
            _manager.OnComplete += _manager_OnComplete;
            _manager.BreakPointReached += _manager_BreakPointReached;
            _manager.RunEntryPoint(0);
        }