моя программ получает данный через различные промежутки времени. Когда программа получает данные происходит событие
| Код | this.NewMyTrades += mytrades => { MessageBox.Show("Event"); WaitMyTradesComplement(); this.Stop(); };
|
эти данные также записываются в IEnumerable<MyTrades>, и происходит проверка того, что пришли все данные. Для этого вызывается метод WaitMyTradesComplement() и все хорошо работает.
| Код | private void WaitMyTradesComplement() { //MessageBox.Show(_nMyTrades.ToString() + " " + this.MyTrades.Count.ToString()); while(true){ Thread.Sleep(1000); if(IsLastTradeByOrderInList()){ //if(_nMyTrades != this.MyTrades.Count){ _nMyTrades = this.MyTrades.Count(); break; } } } private bool IsLastTradeByOrderInList() { List<MyTrade> MyTrades = new List<MyTrade>(this.MyTrades); //lock(this){ if(MyTrades.Count() > 0 && MyTrades.Last().Order.Id == _order.Id && MyTrades.Last().Order.IsMatched()){ return true; } return false; //} }
|
Если в последний метод добавить проход по все элементам листа, то в лист попадает только первая часть данных, остальный не попадают. С чем это связано?
| Код | private bool IsLastTradeByOrderInList() { List<MyTrade> MyTrades = new List<MyTrade>(this.MyTrades); //lock(this){ if(MyTrades.Count() > 0 && MyTrades.Last().Order.Id == _order.Id && MyTrades.Last().Order.IsMatched()){ return true; } int sumOfTrades = 0; for(int i = 0 ; i < MyTrades.Count(); i++){ if(MyTrades[i].Order.Id == _order.Id){ sumOfTrades += MyTrades[i].Trade.Volume; } } if(sumOfTrades == MyTrades.Last().Order.Volume){ return true; } else{ return false; }
//} }
|
|