private void OnLoading() { try { while (!IsDisposed) { var removingSeries = new List <CandleSeries>(); foreach (var info in _series.CachedValues) { if (info.IsStopping) { removingSeries.Add(info.Series); } else { var values = new List <TSourceValue>(100); for (var i = 0; i < 100; i++) { if (!info.Reader.MoveNext()) { removingSeries.Add(info.Series); break; } values.Add(info.Reader.Current); } if (values.Count > 0) { NewSourceValues(info.Series, values); } } } if (removingSeries.Count > 0) { lock (_series.SyncRoot) removingSeries.ForEach(s => _series.Remove(s)); removingSeries.ForEach(RaiseStopped); } lock (_series.SyncRoot) { if (_series.IsEmpty()) { Monitor.Wait(_series.SyncRoot); } } } } catch (Exception ex) { RaiseError(ex); _series.CopyAndClear().ForEach(p => RaiseStopped(p.Key)); } }
private void OnLoading() { try { while (!IsDisposed) { var removingSeries = new List <CandleSeries>(); foreach (var info in _series.CachedValues) { if (info.IsStopping) { removingSeries.Add(info.Series); } else { if (info.Reader.MoveNext()) { var candle = info.Reader.Current; if (info.Series.CheckTime(candle.OpenTime)) { RaiseProcessing(info.Series, candle); } } else { removingSeries.Add(info.Series); } } } if (removingSeries.Count > 0) { lock (_series.SyncRoot) removingSeries.ForEach(s => _series.Remove(s)); removingSeries.ForEach(RaiseStopped); } lock (_series.SyncRoot) { if (_series.IsEmpty()) { Monitor.Wait(_series.SyncRoot); } } } } catch (Exception ex) { RaiseError(ex); _series.CopyAndClear().ForEach(p => RaiseStopped(p.Key)); } }