Начала вылетать ошибка при добавлении s#
Atom Ответить
02.06.2011


Здравствуйте.

У меня была программа которая при помощи qpile-скрипта считывала некоторые данные из квика. Работала она стабильно, без сбоев. Недавно появилась необходимость получать информацию по сделкам. В s# привлекло то, что это можно сделать с помощью нескольких строк кода без особых проблем. Написал так:
Код

trader = new QuikTrader(Config.Instance.PathToQuik);

trader.Connect();
trader.Connected += () =>
{
trader.Terminal.StartDde("Мои сделки");
trader.Terminal.StartDde("Заявки");
};

trader.NewMyTrades += trades =>
{

};



Работает хорошо, сделки приходят, но через некоторое время программа вылетает со следующей ошибкой:

Цитата:

Имя сбойного приложения: AccountInfo.vshost.exe, версия: 10.0.30319.1, отметка времени: 0x4ba2084b
Имя сбойного модуля: ntdll.dll, версия: 6.1.7600.16695, отметка времени 0x4cc7ab44
Код исключения: 0xc0000005
Смещение ошибки: 0x00051f88
Идентификатор сбойного процесса: 0xd20
Время запуска сбойного приложения: 0x01cc21147b7575f5
Путь сбойного приложения: C:\work\AccountInfo\AccountInfo\bin\Release\AccountInfo.vshost.exe
Путь сбойного модуля: C:\Windows\SYSTEM32\ntdll.dll
Код отчета: 057c4ea7-8d08-11e0-af33-0025225c84ec



Если убрать эти строчки, то ошибка не вылетает.

В чем может быть проблема ?






Теги:


Спасибо:




7 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 02.06.2011
Ответить


Дебаггер Visual Studio спасет отца русской демократии.
Спасибо:

Maxim K.

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


Михаил, проблема как раз в том, что студия не перехватывает это исключение. Запускаю Debug, в Отладка->Исключения отмечаю все исключения, но программа просто вылетает с ошибкой, студия никак не реагирует. Не подскажете как еще можно узнать место в котором происходит ошибка ? Судя по коду c000005 это ошибка Access Violation - ошибка доступа при работе с памятью. Но где она возникает я никак не могу понять ....
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 02.06.2011
Ответить


Maxim K. Перейти
Михаил, проблема как раз в том, что студия не перехватывает это исключение. Запускаю Debug, в Отладка->Исключения отмечаю все исключения, но программа просто вылетает с ошибкой, студия никак не реагирует. Не подскажете как еще можно узнать место в котором происходит ошибка ? Судя по коду c000005 это ошибка Access Violation - ошибка доступа при работе с памятью. Но где она возникает я никак не могу понять ....


Даже Access Violation перехватывается... Может что со студией не так? Или с .NET.
Спасибо:

Maxim K.

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


Visual Studio 2010 Ultimate, компьютер новый, систему 5 дней назад поставил (Win7 Pro 32bit), .NET framework 4 стоит. Исключения->Win32Exceptions->Access Violation отмечено. Ошибка вылетает стабильно через ~5 минут работы. Если закомментить trader'а, то ошибка не вылетает.

upd: Common Language Runtime Exceptions -> System.AccessViolationException тоже отмечено.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 02.06.2011
Ответить


Maxim K. Перейти
Visual Studio 2010 Ultimate, компьютер новый, систему 5 дней назад поставил (Win7 Pro 32bit), .NET framework 4 стоит. Исключения->Win32Exceptions->Access Violation отмечено. Ошибка вылетает стабильно через ~5 минут работы. Если закомментить trader'а, то ошибка не вылетает.

upd: Common Language Runtime Exceptions -> System.AccessViolationException тоже отмечено.


Попробуйте 3.5
Спасибо:

Maxim K.

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


Mikhail Sukhov Перейти


Попробуйте 3.5

Не помогло (
Автор топика
Спасибо:

Иванов Андрей

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


Я б написал в обратную сторону.

trader = new QuikTrader(Config.Instance.PathToQuik);
trader.NewMyTrades += trades =>
{

};
trader.Connected += () =>
{
trader.Terminal.StartDde("Мои сделки");
trader.Terminal.StartDde("Заявки");
};
trader.Connect();

Сначала подписаться на события, потом соединяться.
На месте QuikTrader я б ваш коллбэк с экспортом вообще не вызывал =) Потому что в строке "trader.Connected += () =>..." соединение уже установлено, событие вызвано, кто не подписался до установки соединения, тот не успел.
Спасибо:


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

loading
clippy