Решил перейти с версии 1.8 на 2.1 но при старте DDE выдается исключение: "Нет информации о главном окне Quik.Возможно, было неуспешное подключение." При этом примеры из 2.1 работают. Verifer только ошибку о колонке Статус в таблице инструментов, что она должна имет индекс 4. Но при этом примеры то работают, а точно такой же код у меня в проекте не работает. Может где-то что-то упустил, не знаю куда и смотреть. Ссылки все из проекта удалил, библиотеки тоже все заменил, все ошибки поправил. Вот код кнопки подключения.
private void button1_Click(object sender, EventArgs e) { if (!_isConnected) { if (globalsett1.quickpath.IsEmpty()) MessageBox.Show("Путь к Quik не указан"); else { if (this.Trader == null) { // создаем шлюз
try
{
this.Trader = new
QuikTrader(globalsett1.quickpath) ; var columns = this.Trader.SecuritiesTable.Columns;
columns[columns.IndexOf(DdeSecurityColumns.LastTradeTime)] = DdeSecurityColumns.LastChangeTime;
columns.Add(DdeSecurityColumns.MinStepPrice);
this.Trader.NewSecurities += securities =>
treeView1.BeginInvoke((Action)(()=> { tree_sec_add(securities); tree_view_refresh(); }));
this.Trader.SecuritiesChanged += securities =>
dataGridView1.BeginInvoke((Action)(() => { grid_refresh(); })); // создаем менеджер переподключения (будет автоматически соединяться // каждые 10 секунд, если шлюз потеряется связь с сервером) _reConnectionManager = new ReConnectionManager(this.Trader, new Range<TimeSpan>[0], TimeSpan.FromSeconds(10)); _reConnectionManager.ConnectionRestored += () => { MessageBox.Show("Соединение восстановлено"); //Thread.Sleep(20 * 1000); this.Trader.Reconnect(); StartDde(); //this.Trader.IsAsyncMode = true;
};
this.Trader.ConnectionError += error =>
MessageBox.Show("Соединение с Quik потеряно, предпринимается попытка перподключения"); this.Trader.Connect(); StartDde(); //this.Trader.IsAsyncMode = true; // возводим флаг, что соединение установлено (происходит автоматически при создании шлюза) _isConnected = true; this.button1.Text = "Отключиться"; } catch (Exception a) { MessageBox.Show(a.Message.ToString()); this.Trader.Dispose(); this.Trader = null; } } else
try
{
this.Trader.Connect();
//this.Trader.IsAsyncMode = true;
StartDde();
_isConnected = true;
this.button1.Text = "Отключиться";
}
catch (Exception b)
{
MessageBox.Show(b.Message.ToString());
this.Trader.Dispose();
this.Trader = null;
}
}
}
else
{
try
{
this.Trader.Disconnect();
StopDde();
_isConnected = false;
this.button1.Text = "Соединиться";
}
catch (Exception c)
{
MessageBox.Show(c.Message.ToString());
this.Trader.Dispose();
}
}
}
private void StartDde() { _isDdeStarted = true; this.Trader.StartDde(); }
private void StopDde()
{
this.Trader.StopDde();
_isDdeStarted = false;
}
При старте StartDde() выдается исключение. Помогите пожалуйста советом!
Comments (2)
Login or Create account, Log in or register to leave a comment
В дебаргере посмотрел quik соединяется, this.Trader.StartDde(); выдает исключение. При этом этот же quik с этими же настройками стартует DDE, если запускать из примера в 2.1
Извиняюсь, не удосужился прочитать соседнюю ветку, из события Connected все нормально работает!