private async void LearnBtn_Click(object sender, RoutedEventArgs e) { if (_aggregator.IsProcess) { return; } if (_days.Count == 0) { MessageBox.Show("_days.Count==0"); return; } var count = 0; ProgressBar.Maximum = _days.Sum(day => day.Trades.Count); var scale = (decimal)ProgressBar.Maximum / 100; if (!_aggregator.IsStart) { _aggregator.SimTrader.NewTrade += trade => { count++; if (count < scale) { return; } Dispatcher.Invoke(new Action(() => ProgressBar.Value += count)); count = 0; }; _aggregator.Finish += signals => { var newSignLst = new List <List <Signal> >(signals); _signals.AddRange(newSignLst); _aggregator.DaysSignals.Clear(); Dispatcher.Invoke(() => { LoadBtn.Background = new SolidColorBrush(Colors.White); ProgressBar.Value = 0; _days.Clear(); Dqn(); }); }; } _aggregator.AddDays(_days); await Task.Factory.StartNew(_aggregator.ProcessDays); }