При обращении к IsConnected падение System.NullReferenceException
Atom
24.04.2017


Добрый день! Программа падает при попытке проверить подключен ли терминал к торгам с исключением типа - "System.NullReferenceException".
Это баг?

Код
private static string _login = "U0111325";
private static string _pass = "02323";
private static string _quikPath = @"C:\Program Files\QUIK-Junior_7,10\info.exe";

static void Main(string[] args)
{

///////////////////////////////////////
// Запускаем терминал и логинимся если это еще не сделано
///////////////////////////////////////

var quikPath = QuikTerminal.GetDefaultPath();

if (quikPath.IsEmpty())
{
quikPath = _quikPath;
}

var terminal = QuikTerminal.Get(quikPath);

if (!terminal.IsLaunched)
{
Console.WriteLine("Запускаем терминал: {0}", quikPath);
terminal.Launch();
}

if (!terminal.IsLaunched)
{
Console.WriteLine("Не удалось запустать терминал!");
Console.ReadKey();

return;
}

if (!terminal.[b]IsConnected[/b])
{
Console.WriteLine("Авторезируемся...");
terminal.Login(_login, _pass);
}
if (!terminal.IsConnected)
{
Console.WriteLine("Не удалось авторизироваться! Попробуйте авторизироваться вручную.");
Console.ReadKey();
}
}





Спасибо:




7 Ответов
Константин

Фотография
Трейдер
Дата: 10.05.2017
Ответить


???
Автор топика
Спасибо:

Support

Фотография
Дата: 10.05.2017
Ответить


Вы используете очень старый пример... Возьмите пример SimpleQuik из последней версии s#
Спасибо:

Константин

Фотография
Трейдер
Дата: 10.05.2017
Ответить


Здравствуйте! В SimpleQuik нашел событие:
Код

                    // подписываемся на событие разрыва соединения
                    Trader.ConnectionError += error =>
                    {
                     this.GuiAsync(() => MessageBox.Show(this, error.ToString()));
                    
                    };

Но данное событие как японимаю сигнализирует о разрыве соединения программы с терминалом quik.
Я же пытаюсь получить данные о том, подключен ли терминал к торгам. Была ситуация когда терминал, по каким то причинам, отключился от сервера и просто ничего не делал. Или другой случай... Если терминал запущен но не подключен к торгам после чего запускается робот и пытается получить данные. Может ли StockSharp узнать подключен ли терминал к торгам или нет, чтоб можно было в случае отсутствия подключения залогиниться и подключиться?

Еще заметил следующее. Событие об успешном восстановлении соединения:
Код

                    // подписываемся на событие об успешном восстановлении соединения
                    Trader.Restored += () =>
                    {
                     this.GuiAsync(() => MessageBox.Show(this, LocalizedStrings.Str2958));
                    
                    };

не срабатывало как бы я не пытался его вызвать. То есть все было в подключенном состоянии => закрыл quik => открыл quik => подключился к торгам => событие не сработало.
Так же отключил интернет => подключил интернет => quik восстановил подключение => событие тоже не сработало.
Автор топика
Спасибо:

Support

Фотография
Дата: 11.05.2017
Ответить


Используйте событие MarketTimeChanged, так будет надежнее...
Спасибо:

Константин

Фотография
Трейдер
Дата: 19.05.2017
Ответить


Здравствуйте! Честно говоря не понял от чего зависит событие MarketTimeChanged. Написал вот так:
Код
QuikTrader.MarketTimeChanged += span => { Console.WriteLine(span);};

На консоль выводится период в милисекундах в нескончаемом потоке. Разрываю связь с сервером в квике, но поток продолжается...
В справке не совсем понятно пояснено про данное событие.
Вообщем я сделал свое событие которое реагируе на свойство QuikTerminal.ServerTime. Если null то событе говорит что квик не подключен. Как только появляется время сервера в квике то событе сигнализирует что квик подключен.

P.S. Про событие MarketTimeChanged тоже хочется узнать. На что именно оно реагирует.
Автор топика
Спасибо:

Support

Фотография
Дата: 22.05.2017
Ответить


Уточню этот вопрос..
Спасибо:

Support

Фотография
Дата: 22.05.2017
Ответить


В итоге... В s# нет штатных средств контроля соединения с торговым сервером...
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy