← 返回

Не вызываются события стакана

В событии NewSecurities в цикле получаю security, стакан, добавляю к нему события QuotesChanged и UpdateFinished и вставляю стакан в коллекцию. RegisterQuotes происходит, но события не вызываются.

Если работаю с одним инструментом и стакан - переменная класса, то все работает. Что я не так делаю?

本主题对您有帮助吗?

分享主题

评论 (4)

登录创建账户, 登录或注册以发表评论

Mikhail Sukhov
Mikhail Sukhov

Приведите код обработчика. Не понятно с описания.

Lafert
Lafert 作者
       _trader.NewSecurities += (securities) =>
            {
                foreach(Security security in securities)
                {
                    if (Securities.IndexOf(mysec =>

mysec.security.Equals(security as Security)) < 0) { MarketDepth stakan = new MarketDepth(security); stakan.QuotesChanged += (odr, quotes) => { foreach (Quote qt in quotes.Values) { to_log("{0} {1} {2} {3}".Put(stakan.Security.Id, odr, qt.Price, qt.Volume)); } }; stakan.UpdatingStarted += () => { to_log("{0} stakan.UpdatingStarted".Put(security.Id)); }; stakan.UpdatingFinished += () => { to_log("{0} stakan.UpdatingFinished".Put(stakan.Security.Id)); StakanUpdated(stakan); }; AddSecurities(security, stakan);

                   }
                }
            };
    }

public void AddSecurities(Security security, MarketDepth stakan) { if (security == null) throw new ArgumentNullException("security"); int _daily_sqlId = 0; try { _trader.RegisterQuotes(security); } catch (Exception ex) { to_log(ex.Message); } Securities.Add(security); _security_stakans.Add(security, stakan); to_log("Добавлен инструмент {0}".Put(security.Id)); }

После этого стаканы в квике регитрируются, но событий не происходит. Не происходити события ProcessUnknownDdeData. После закрытия квика в окне сообщений Квика - переполнена очередь сообщений по инструмкенту.

Mikhail Sukhov
Mikhail Sukhov

Иду по шагам:

  1. f (Securities.IndexOf(mysec => mysec.security.Equals(security as Security)) < 0) думаю можно смело заменить на Securities.Contains
  2. Нельзя создавать объекты по new. Это делает сам шлюз. Как результат, шлюз изменяется совсем другой объект, нежели Ваш. Это касается всего, кроме заявок. Получайте объект стакана из ITrader.GetQuotes(Security).
  3. Насчет закрытия не понял. Где получаете ошибку с очередью? В Квике? Так Вы же его закрываете.
Lafert
Lafert 作者

Спасибо. Получилось