не понятен механизм работы метода AddRange
здравствуйте.
Пытаюсь реализовать такую стратегию, в которой, цена следующей заявки зависит от цены предидущей.
Для этого подпислся на событие получения новых моих сделок, сохраняю их в коллекцию, и получаю цену последней сделки.
Регистрирую заявку, жду когда придет сделка, извлекаю последную сдлку и беру цену.
Код
MainWindow.Instance.Trader.RegisterOrder(order);
waitHandle.WaitOne();
if (_backgroundWorker.CancellationPending){return;}
_backgroundWorker.ReportProgress(4, order); curLotBuyNow += Trades[Trades.Count-1].Order.Volume;
MessageBox.Show("Id= "+Trades[Trades.Count-1].Order.Id.ToString()+" curLotBuyNow= " + curLotBuyNow.ToString());
waitHandle.Reset();
price = Math.Min(_priceOfOrder, Trades[Trades.Count-1].Trade.Price);
При получении сделки, я хочу чтобы сначала, сделки добавились в коллекцию, а потом произошла разблокировка потока и произошло извлечение цены.
Код
MainWindow.Instance.Trader.NewMyTrades += trades =>this.GuiAsync(() =>
{
lock(this)
{
trades = from n in trades
where (n.Trade.Security == _security) && (n.Order.ExtensionInfo == "S#")
select n;
int startSize = Trades.Count;
MessageBox.Show("startSize= "+startSize.ToString());
this.Trades.AddRange(trades);
while(startSize == Trades.Count){
}
MessageBox.Show("Count= "+Trades.Count.ToString());
//Если по другому инструменту?
if((Orders.Count != 0) && Orders[Orders.Count-1].IsMatched()){
this.Orders.RemoveAt(Orders.Count-1);
waitHandle.Set();
}
}
});
Но этого не происходит. Часто этот код curLotBuyNow += Trades[Trades.Count-1].Order.Volume;
извлает предпоследнуюю сделку. Я пытался и цикл ожидания использовать(while(startSize == Trades.Count){}) и lock, но ничего не помогает.
Помогите, пожалуйста, разобратся.