Если закрыть квик, а после вызвать 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?
Kommentare (1)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Это точно было.
От всех случаев жизни все равно не застраховаться. Лучше оставить как есть. А чем сообщение "Нет информации о главном окне Quik. Возможно, было неуспешное подключение." не информативно? Могу подправить его.