Не хватает ветки форума, куда можно было бы писать об ошибках, не попадающих ни в одну из текущих категорий. Вот сейчас даже не знаю, куда было бы правильно сообщить об обнаруженной проблеме. Напишу сюда.
Обновился до последней версии. Такой код перестал работать:
candleToken = candleManager.RegisterVolumeCandles(this.SelectedSecurity, 10000);
IEnumerable<Candle> tmpCandles = candleManager.GetVolumeCandles(this.SelectedSecurity, 10000);
Kommentare (19)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Это Стратегии и Алгоритмы. Именно эта тема является общей.
По проблеме - чему равен SelectedSecurity ну и полный Stack Trace конечно нужен. Не в виде скриншота только, а ctr+c, ctr+v.
Не плохо бы стек трейс вставлять текстом. Можно даже без скрина.
Попробую собрать нужную информацию.
StackTrace:
После вызова candleManager.GetVolumeCandles() и до момента ошибки стек вызовов такой:
System.Diagnostics.StackFrame дает такую инфу:
Если нужно еще что-то - выложу.
Да, по поводу темы понятно, буду туда выкладывать в дальнейшем. SelectedSecurity - {Фьючерсный контракт SBRF-3.12@RTS} при подключении к Смарту или, например, RIH2 при подключении к КВИКу. Роли не играет, ошибка все равно возникает.
Как candlemanager создаётся? Какая версия S#? 4.0.15?
На это смотрели?
в промежутках ... несущественный код
Собственно, код и был взят изначально из примера. И не так давно работал, пока не обновился до последней версии, которая сейчас выложена. Обновлялся два-три дня назад, работаю с trunk веткой. Обновлялся полностью удалив старую папку и залив новую с сервера. Если запускаю тот же код на версии, которая была до обновления (не знаю как проверить версию, просто перед обновлением сохранил всю папку) - все отлично исполняется, рисуются бары по объему каждые 10000.
А у вас все нормально отрабатывается, ошибка не воспроизводится?
Удалил все, заново забрал последнюю версию с сервера, создал тестовый проект - ошибка повторяется. Единственное - проверял на Смарте, т.к. КВИК сейчас вырублен, а к Смарту можно подключиться. Но и на КВИКе ошибка была. Бумага выбирается первая попавшаяся.
Код проекта для проверки:
Бага. Буду разбираться с чем связано. В общем будет 4.0.16 с фиксом
Фикс готов, положил на codeplex в trunk. Будет время - соберу архивы и выложу релиз.
Спасибо за оперативность, забираю!
Кстати, вопрос по выкладыванию. Немного доработал индикатор JurikMovingAverage, хочу его выложить. Могу прямо в trunk класть?
Нет, в dev. В trunk - только баг-фиксы относящиеся к версии 4.0, в фиксах которых уверены. Вся доработка и непосредственно разработка - в dev.
Будет готов 4.1 - будет мёрж dev с trunk.
Все ясно, спасибо.
Кстати, я там релиз уже выпустил с этим фиксом - 4.0.16 :)
Еще одна ошибка обнаружилась - если создать два раза QuikTrader, то на второй строке возникает ошибка "Элемент с тем же ключом уже был добавлен."
StackTrace:
Это не ошибка. Нельзя создать 2 QuikTrader с одним и тем же именем DDE сервера и Transaq2Quik библиотеки. Передавайте в конструктор разные параметры.
Ок, а как тогда убить первый, чтоб создать потом второй?
Я создаю QuikTrader или SmartTrader в диалоговом окне, оно каждый раз создается заново, как понимаете. Допустим, сначала создал QuikTrader. Потом - SmartTrader (и в главном окне использовал уже его), на QuikTrader уже ссылок не осталось живых. Потом заново пытаюсь создать QuikTrader, и тут валится ошибка.
Несколько непривычно получать ошибку при создании нового объекта класса, с учетом того, что ссылка на старый давно не существует.
Вы уверены что экспорт остановлен и GC (garbage collector) успешно сработал? Как это проверяется и выполняется?
Правильная работа одновременно с несколькими терминалами показана в документации и в примерах.
Dispose
Экспорт мог и не начинаться. Отдельного вызова GC тоже было недостаточно. Получилось избавиться от проблемы путем небольшого рефакторинга и ручного вычищения старого объекта. И только после этого можно создавать новый, не получая ошибку.
Да, это понятно. Просто сначала подумал, что при создании что-то куда-то пишется или сохраняется, и потом когда новый объект создается, запись уже существует, вот и не может создаться заново. Поэтому и спрашивал про метод для очистки вероятных записей в каком-нибудь хранилище. Про очевидный вариант подумал во вторую очередь. :)