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)); }
protected virtual void OnWorkerCompleted(EventArgs e) { IsBusy = false; WorkerCompleted?.Invoke(this, e); }