Если закрыть квик, а после вызвать 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__DisplayClassf
1.<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?
Comments (1)
Login or Create account, Log in or register to leave a comment
Это точно было.
От всех случаев жизни все равно не застраховаться. Лучше оставить как есть. А чем сообщение "Нет информации о главном окне Quik. Возможно, было неуспешное подключение." не информативно? Могу подправить его.