← Назад

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

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

У меня была программа которая при помощи 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
Mikhail Sukhov

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

Maxim K.
Maxim K. Автор

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

Mikhail Sukhov
Mikhail Sukhov

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

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

Maxim K.
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 тоже отмечено.

Mikhail Sukhov
Mikhail Sukhov

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.
Maxim K. Автор

Mikhail Sukhov: Попробуйте 3.5 Не помогло (

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

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

            trader = new QuikTrader(Config.Instance.PathToQuik);
            trader.NewMyTrades += trades =>
            {
             
            };
            trader.Connected += () =>
            {
                trader.Terminal.StartDde("Мои сделки");
                trader.Terminal.StartDde("Заявки");
            };
            trader.Connect();

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