Понятно, что дело в потоках, но перечитав всю теорию по ним, а также раздел "Пользовательский интерфейс (GUI)" из документации так и не разобрался. видимо все новички сталкиваются с данной проблемой.
Из документации - "Основное ограничение визуального API под Windows состоит в том, что нельзя обращаться из другого потока к элементам окна."
далее имеем следующий код:
this.Trader.NewTrades += trades =>
{
middle = this.Trader.Trades.Where(p => p.Security == _RIZ1).GetAveragePrice());
this.GuiAsync(() => this.mid_price.Text = middle.ToString();
};
Насколько я понял, для события появления новой сделки создается новый поток, поэтому результат вычислений не выводится в текстбокс. Т.е. нужно исправить на
middle = this.Trader.Trades.Where(p => p.Security == _RIZ1).GetAveragePrice());
this.GuiAsync(() => this.mid_price.Text = middle.ToString();
Все работает!
Но я никак не могу понять почему не хочет работать такой вариант:
this.GuiAsync(() => middle = this.Trader.Trades.Where(p => p.Security == _RIZ1).GetAveragePrice());
this.GuiAsync(() => this.mid_price.Text = middle.ToString();
И еще такой вопрос... Если изначально использовать шлюз GuiTrader, данная проблема отпадает?