Проблема такая: есть подписка на событие, по которому обновляется коллекция.
this.Trader.NewOrders += orders => this.GuiAsync(() => _ordersWindow.Orders.AddRange(orders)); //GuiAsync это аналог Dispatcher.BeginInvoke из фреймворка, с которым работаю
есть таймер, в котором вызывается функция
public void OnTimedEvent(object source, ElapsedEventArgs e)
{
if (MainWindow.Instance._tradesWindow.Trades[MainWindow.Instance._tradesWindow.Trades.Count() - 1].Time >= startTime)
{
var trade = MainWindow.Instance._tradesWindow.Trades[MainWindow.Instance._tradesWindow.Trades.Count() - 1];
if (trade.Price != Cc)
MainWindow.Instance.Dispatcher.BeginInvoke(new CheckNewStrikeA1Delegate(CheckNewStrikeA1), trade.Price);
}
}
внутри функции происходят некоторые действия, после которых меняется _ordersWindow.Orders
void CheckNewStrikeA1(double strike)
{
lock (myLock2)
{
A1_P_51(strike);
}
if (IsNewTrade() == false) //эта функция смотрит в _ordersWindow.Orders
return;
Но, если _ordersWindow.Orders изменилось после прохождения A1_P_51(strike), IsNewTrade изменений не видит. Видит только при следующем тике таймера.
В какую сторону смотреть?