Alexander
|
Дата: 17.05.2010
При попытке создать QuikTrader с добавленным ранее путём возникает эксепшен ArgumentException:
который невозможно отловить. Возникает он внутри конструктора QuikTrader, try\catch не помогают.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 17.05.2010
Предыдущий QuikTrader надо очищать - trader.Dispose().
|
|
Спасибо:
|
|
|
|
|
Alexander
|
Дата: 17.05.2010
Это возникает при добавлении их в MultiTrader через Trader.AggregatedTraders.Add. Для меня некритично проверять пути самому, но хотелось бы чтобы такое исключение отлавливалось внутри конструктора QuikTrader.
p.s. я похоже ошибся - там ключом ведь является аккаунт квика, так что дело в совпадающих аккаунтах.
И попутно ещё вопрос - как быть с разными субсчетами в одном квике? Необходимо создавать несколько QuikTrader с одинаковыми путями и разными аккаунтами или есть способ получше посылать заявки на биржу?
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 17.05.2010
Субсчет - это значит один квик и разные счета в заявках. Следовательно, один QuikTrader, который подсовывается в AggregatedTraders под разными ключами-субсчетами.
|
|
Спасибо:
|
|
|
|
|
Alexander
|
Дата: 17.05.2010
с этим спасибо, буду так делать.
а всё же неотлавлимое исключение внутри конструктора QuikTrader (с добавлением одинаковых ключей) можно исправить в новой бете 2.0?
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 17.05.2010
А можно сюда вставить полный текст ошибки (стек-трейс)?
|
|
Спасибо:
|
|
|
|
|
Alexander
|
Дата: 17.05.2010
|
|
|
|
вот что удалось выцепить из интеллитрэйс (я в vs2010 работаю) -
A System.ArgumentException was thrown: "An item with the same key has already been added." Thread: Dde thread [2476]
Вот информация по исключению:
Message=An item with the same key has already been added. Source=System.Windows.Forms StackTrace: at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) at NDde.Advanced.DdeContext.DdeThread.Invoke(Delegate method, Object[] args) at NDde.Advanced.DdeContext.Invoke(Delegate method, Object[] args) at NDde.Advanced.DdeContext.Invoke(ThreadStart method) at NDde.Server.DdeServer.Register() at . . () at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:
Собственно и перехватить никак не удаётся.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 17.05.2010
Тоесть, try catch на new QuikTrader не помогает?
|
|
Спасибо:
|
|
|
|
|
Alexander
|
Дата: 17.05.2010
да, совершенно верно, не помогает. в этом-то и проблема. т.е. тут выхода 2 - либо ручками проверять всё что добавляю на уже наличие уже добавленного элемента с таким ключом, либо - ловить это исключение внутри S# и выкидывать исключение, которое уже я смогу отловить (вроде это возможно). С точки зрения архитектуры, на мой взгляд, второй вариант предпочтительней.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 17.05.2010
Ага, не увидел. Действительно, дде работает в другом потоке. Перехватить через try/catch не получится. Подумаю, как исправить ошибку.
|
|
Спасибо:
|
|
|
|