← Zurück

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

Если закрыть квик, а после вызвать 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.<CombinePredicates>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?

War dieses Thema hilfreich?

Thema teilen

Kommentare (1)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

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

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

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

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