Attempted to read or write protected memory.
Atom
21.01.2011
Maxim


Михаил, добрый день. Помогите, пожалуйста, найти причину ошибки.

Описание ситуации: периодически, приблизительно раза два в неделю, при работе S# c Квиком возникает ошибка. В остальное время все работает без ошибки.

Описание исключения из дебагера:


ex	{"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."}
[System.AccessViolationException]	{"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."}
Data	{System.Collections.ListDictionaryInternal}
HelpLink	null
InnerException	null
Message	"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Source	"mscorlib
StackTrace

at System.StubHelpers.ValueClassMarshaler.ConvertToManaged(IntPtr dst, IntPtr src, IntPtr pMT)\r\n   
at Ecng.Interop.WinApi.GetMenuItemInfo(IntPtr hMenu, UInt32 uItem, Boolean fByPosition, MenuItemInfo& lpmii)\r\n   
at Ecng.Interop.ManagedWinApiHelper.GetMenuItems(IntPtr hMenu, SystemWindow window)\r\n   
at Ecng.Interop.SystemMenu..ctor(IntPtr hMenu, SystemWindow window)\r\n   
at Ecng.Interop.ManagedWinApiHelper.GetMenu(SystemWindow window)\r\n   
at Ecng.Trading.Quik.QuikTerminal.GetAccounts()\r\n   
at Ecng.Trading.Quik.QuikTrader.#=qOpBiLK4QqpviIWtcch8OWgvUqP3awIStT7FRqaHhRZY=.#=qCEoE_nVJQF0bssPXr1HgDhv_eIFFIbEByDSR6PGDD1A=()\r\n
at Ecng.Trading.Algo.BaseTrader.ProcessEvents(Action handler)
		
TargetSite	{Void ConvertToManaged(IntPtr, IntPtr, IntPtr)}


Ошибка возникает при исполнении участка кода:


// Подписываемся на событие соединения с квик
Global.Quik.Connected += () => 
{
	_waitConnected.Set(); 
};

// Подписываемся на событие появление портфеля
Global.Quik.NewPortfolios += portfolios =>
{
	Portfolio _portfolio = portfolios.FirstOrDefault(p => p.Name == Global.SqlQuikProperty.QuikAccount);

	if (_portfolio != null)
	{
		Global.Portfolio = _portfolio;
		_waitPortfolio.Set();
	}                        
};

// Соединяемся с Quik
Global.Quik.Connect();

if (_waitConnected.WaitOne(10000) == false)
	throw new Exception("We try connect to Quik, but have reach timeout");

if (_waitPortfolio.WaitOne(10000) == false)
	throw new Exception("We try connect to get Portfolio, but have reach timeout");

Более конкретно — ошибка возникает при исполнении вот этой строчки:


if (_waitPortfolio.WaitOne(10000) == false)

При этом ошибка возникает не в выше описанном коде, а ошибка ловится обработчиком события BaseTrader.ProcessDataError

Решить вопрос удается только логофом пользователя, после чего необходимо подождать некоторое время, прежде чем повторно входить под этим пользователем.


Теги:


Спасибо:


1 2  >
Mikhail Sukhov

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


Квик при этом запущен? Или он так же запускается чуть раньше данного кода?

Спасибо:

Maxim

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


Что Вы подразумеваете под словом «запущен»?

Если работает ли сама программа, то да, она параллельно работает, во время того, когда выполняется этот код. Квик соединен с сервером в этот момент.

Если Вы имеете ввиду связана ли библиотека с Квиком, то то же да. Это есть в примере кода: Quik.Connect();

Спасибо:

Mikhail Sukhov

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


Maxim: Что Вы подразумеваете под словом «запущен»?

Если работает ли сама программа, то да, она параллельно работает, во время того, когда выполняется этот код. Квик соединен с сервером в этот момент.

Если Вы имеете ввиду связана ли библиотека с Квиком, то то же да. Это есть в примере кода: Quik.Connect();

Я имею ввиду что ошибка вылетает в процессе работы (не утром, когда Квик запускается, ни вечером, когда выключается). Ошибка просто вылетает или она вылетает когда Вы что то в Квике параллельно делаете?

Спасибо:

Maxim

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


Ошибка возникает, когда Квик работает в обычном режиме, а я запускаю программу с S#. Ошибка возникает только при старте программы. После того, как ошибка возникла, повторные запуски программы с S# заканчиваются аналогично. Единственный способ запустить программу, это сделать логоф, подождать немного, залогинится и запустить программу.

В то время, когда появляется ошибка я в Квике ничего не делаю.

Спасибо:

Mikhail Sukhov

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


Maxim: Ошибка возникает, когда Квик работает в обычном режиме, а я запускаю программу с S#. Ошибка возникает только при старте программы. После того, как ошибка возникла, повторные запуски программы с S# заканчиваются аналогично. Единственный способ запустить программу, это сделать логоф, подождать немного, залогинится и запустить программу.

В то время, когда появляется ошибка я в Квике ничего не делаю.

Я правильно понял, что для того, чтобы робот на S# запустился, вы делаете перелогин в Квике?

Спасибо:

Maxim

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


Mikhail Sukhov: Я правильно понял, что для того, чтобы робот на S# запустился, вы делаете перелогин в Квике?

Нет. Не правильно.

Если возникла эта ошибка, то единственный способ (по крайне мере который я знаю) это перелогинится из виндового пользователя. Просто закрыть программу и Квик, а потом все запустить — не помогает.

Повторюсь — ошибка возникает не всегда. Иногда. Из-за этого ее трудно повторить и локализовать.

Спасибо:

Mikhail Sukhov

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


Maxim: Если возникла эта ошибка, то единственный способ (по крайне мере который я знаю) это перелогинится из виндового пользователя. Просто закрыть программу и Квик, а потом все запустить — не помогает.

Да, очень странно. У меня было до этого предположение, что порядок меню элементов меняется в процессе работы Квика. А тут совсем другое. Сам Квик нормально работает после этой ошибки?

Спасибо:

Maxim

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


В Квике после ошибки я интенсивно не работал. Надо будет проверить.

Но явных косяков в Квике после ошибки не видно.

Спасибо:

Mikhail Sukhov

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


Maxim: В Квике после ошибки я интенсивно не работал. Надо будет проверить.

Но явных косяков в Квике после ошибки не видно.

В догонку, выведите QuikTerminal.MainWindow.Title когда вновь появиться такая ситуация.

Спасибо:

Maxim

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


QuikTerminal.MainWindow.Title

"[qtest078 UID: 1737] Информационно-торговая система QUIK (версия 5.18.0.239) - [Заявки]"

Получилось добиться повторяемости ошибки.

Как оказалось, ошибка возникает, когда окно «Заявки» развернуто в Квике на весь экран.

Спасибо:
1 2  >

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

loading
clippy