Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обновление коллекции и обращение к ней из другого потока

69K
01 апреля 2011 года
Alexandra Dobryn
2 / / 01.04.2011
Проблема такая: есть подписка на событие, по которому обновляется коллекция.

[CODE=C#]this.Trader.NewOrders += orders => this.GuiAsync(() => _ordersWindow.Orders.AddRange(orders));//GuiAsync это аналог Dispatcher.BeginInvoke из фреймворка, с которым работаю [/CODE]

есть таймер, в котором вызывается функция

[CODE=C#]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);
}
}[/CODE]

внутри функции происходят некоторые действия, после которых меняется _ordersWindow.Orders

[CODE=C#]void CheckNewStrikeA1(double strike)
{
lock (myLock2)
{
A1_P_51(strike);
}

if (IsNewTrade() == false) //эта функция смотрит в _ordersWindow.Orders
return;

lock (myLock2)
{
A1_P_53();
}

}[/CODE]

Но, если _ordersWindow.Orders изменилось после прохождения A1_P_51(strike), IsNewTrade изменений не видит. Видит только при следующем тике таймера.
В какую сторону смотреть?
5
02 апреля 2011 года
hardcase
4.5K / / 09.08.2005
ObservableCollection не пробовали использовать?
69K
02 апреля 2011 года
Alexandra Dobryn
2 / / 01.04.2011
Цитата: hardcase
ObservableCollection не пробовали использовать?



они как раз такие =)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог