Exception при выключенном Квике
Atom
26.02.2011
Alexander


Если закрыть квик, а после вызвать MultiTrader.Dispose(), то появляется следующий Exception (через ProcessDataError):

System.InvalidOperationException: Нет информации о главном окне Quik. Возможно, было неуспешное подключение. at Ecng.Trading.Quik.QuikTerminal.#=qGbzhp48kD0JaPm3iYiSrOByTg2rrF7KP$ZU2BKP7F0w=() at Ecng.Trading.Quik.QuikTerminal.get_SystemProcess() at Ecng.Trading.Quik.QuikTerminal.#=qJyL1eH$Ax$caqdhRw3tPl4IRpHewakokVcsX7r5fd0s=(SystemWindow #=qnHYA9QfL7wHksvtgpAk25Q==) at System.Linq.Enumerable.<>c__DisplayClassf1.<CombinePredicates>b__e(TSource x) at System.Linq.Enumerable.<>c__DisplayClassf1.b__e(TSource x) at System.Linq.Enumerable.WhereArrayIterator1.MoveNext() at System.Linq.Buffer1..ctor(IEnumerable1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable1 source) at Ecng.Trading.Quik.QuikTerminal.#=qqOE5tozRGYYh4i20ozsQbg==() at Ecng.Trading.Quik.QuikTerminal.#=qf7tHmu4JbnZCzkQ3pbFAMYwh5NYet5698_tHiYYisVc=() at Ecng.Trading.Quik.QuikTerminal.StopDde(String caption) at Ecng.Trading.Quik.QuikTerminal.#=qRgC6Y3r9dTcXyrlGEZu_KQ==(IEnumerable`1 #=qd2GJpU5pR4hI8VrI5b$e_w==) at Ecng.Trading.Quik.QuikTerminal.StopActiveDdeExport() at Ecng.Trading.Quik.QuikTrader.DisposeManaged()

Версия Stock# 3.0.8. Могу ошибаться, но на 2.6 подобного не было.

Лечится таким образом:

        protected override void DisposeManaged()
        {
            if (IsConnected && !Terminal.SystemProcess.HasExited)
                base.DisposeManaged();
        }

Вообще возникают разного рода Exception при выключенном квике и когда дёргаешь те или иные методы от ITrader: StartExport/StopExport RestartExport ....

Я не уверен где должны стоять проверки на подключение к квику - внутри библиотеки или реализовывать внутри архитектуры?

Для RestartExport у меня, к примеру, сделано следующее:

        public override void ReStartExport()
        {
            if (IsConnected && !Terminal.SystemProcess.HasExited)
                base.ReStartExport();
        }

Перед вызовом StartExport\StopExpoке я проверяю что MultiTrader подключен:

        private bool IsMultiTraderConnected()
        {
            if (!_multiTrader.IsConnected)
                return false;

            var ownQuikTraderCollection = _multiTrader.AggregatedTraders.OfType<OwnQuikTrader>();
            return ownQuikTraderCollection.Count() > 0 &&
                ownQuikTraderCollection.All(quikTrader => quikTrader.IsConnected && !quikTrader.Terminal.SystemProcess.HasExited);
        }

Имеет ли смысл это добавлять в библиотеку Stock# и выдавать более понятные сообщения вместо ProcessDataError?


Теги:


Спасибо:


Mikhail Sukhov

Фотография
Дата: 28.02.2011
Ответить


Alexander: Версия Stock# 3.0.8. Могу ошибаться, но на 2.6 подобного не было.

Это точно было.

Alexander: Имеет ли смысл это добавлять в библиотеку Stock# и выдавать более понятные сообщения вместо ProcessDataError?

От всех случаев жизни все равно не застраховаться. Лучше оставить как есть. А чем сообщение "Нет информации о главном окне Quik. Возможно, было неуспешное подключение." не информативно? Могу подправить его.

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy