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


Если закрыть квик, а после вызвать 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__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 подобного не было.

Лечится таким образом:
Код
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