Пример #1
0
        private void ThreadFunc()
        {
            _mapDepartment.Add(_department);

            while (_department != _finishDepartment && !_isEndlessLoop)
            {
                var nextDepartment = _department.Perform(_stampList);
                if (_department == _targetDepartment)
                {
                    var state = _stampList.GetState();
                    if (!_result.Any(it => state.Count == it.Count && state.All(it.Contains)))
                    {
                        _result.Add(state);
                    }
                }

                _department = nextDepartment;

                #region Check endless loop

                if (!_mapDepartment.Contains(_department))
                {
                    _mapDepartment.Add(_department);
                }

                var fullState = $"{_stampList.SerializeFullState()}&{_mapDepartment.IndexOf(_department)}";
                if (_states.Contains(fullState))
                {
                    _isEndlessLoop = true;
                }
                _states.Add(fullState);

                #endregion
            }

            if (_department == _targetDepartment)
            {
                var state = _stampList.GetState();
                if (!_result.Any(it => state.Count == it.Count && state.All(it.Contains)))
                {
                    _result.Add(state);
                }
            }

            WorkerCompleted?.Invoke(this, new WorkerCompletedEventArgs(_result, _isEndlessLoop));
        }
Пример #2
0
 protected virtual void OnWorkerCompleted(EventArgs e)
 {
     IsBusy = false;
     WorkerCompleted?.Invoke(this, e);
 }