← 返回

Начала вылетать ошибка при добавлении 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 += () =>..." соединение уже установлено, событие вызвано, кто не подписался до установки соединения, тот не успел.