Exception при выключенном Квике
Если закрыть квик, а после вызвать MultiTrader.Dispose(), то появляется следующий Exception (через ProcessDataError):
Quote:
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__DisplayClassf`1.<CombinePredicates>b__e(TSource x)
at System.Linq.Enumerable.<>c__DisplayClassf`1.<CombinePredicates>b__e(TSource x)
at System.Linq.Enumerable.WhereArrayIterator`1.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 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 подобного не было.
Лечится таким образом:
Code protected override void DisposeManaged()
{
if (IsConnected && !Terminal.SystemProcess.HasExited)
base.DisposeManaged();
}
Вообще возникают разного рода Exception при выключенном квике и когда дёргаешь те или иные методы от ITrader:
StartExport/StopExport
RestartExport
....
Я не уверен где должны стоять проверки на подключение к квику - внутри библиотеки или реализовывать внутри архитектуры?
Для RestartExport у меня, к примеру, сделано следующее:
Code public override void ReStartExport()
{
if (IsConnected && !Terminal.SystemProcess.HasExited)
base.ReStartExport();
}
Перед вызовом StartExport\StopExpoке я проверяю что MultiTrader подключен:
Code 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?