AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.07.2004, 11:45   #5  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Спасибо всем за внимание, Я РЕШИЛ ПРОБЛЕМУ.
Счастья полные штаны. Перехватывать асинхронные события изве в Axapta - реально!

Цитата:
SComm прекрасно отлавливает события - не совсем понимаю, при чем здесь таймер? Или имелась в виду задержка чтения (sleep())?
Повторю свой постинг из форума маззи - надеюсь станет понятно в чём БЫЛА проблема:

Цитата:
...Спасибо огромное за совет! Действительно я еще ломал голову как внедрить COM-объект в аксапту так чтобы и аксапта могла вызывать его методы, и объект мог вызывать события в ней - интеграция с ActiveX это решает.
Однако основная проблема всё равно остаётся открытой.
Дело в том что обычные ActiveX контролы запускаются и целиком и полносью работают в рамках того же процесса и потока, в котором выполняется основная программа и поэтому никаких проблем не возникает - при возникновении Event-а метод его обработки работает как надо.
Например, если я делаю ActiveX-control, который активирует внутри себя WinAPI-шный таймер (который выполняется в рамках очереди сообщений основного потока процесса), и в Event-е пишу print "Event" - всё работает замечательно - с периодичностью 1секунда в print window выводится эта строка.

Тут же трудность состоит в том что объект драйвера выполняется в отдельном потоке и Event соответственно срабатывает в нём. А так как в это время сама аксапта может уже (и как правило так и происходит) заниматсься своими делами (реакцией на ввод, какие то внутренние циклы), то получается событие "вклинивается" в нормальный ход вещей совсем ненормальным образом.
Например если я пишу в своём ActiveX контроле инициализацию thread-а, в котором периодически пытаюсь активировать Event - приложение рушится без лишних вопросов.
Тут нужно сработать таким образом, чтобы активация событий была синхронизирована с работой основного кода аксапты. В 1С для этого специально был предусмотрен механизм внешних сообщений, вот я и подумал - а нет ли такого в аксапте тоже? Может можно хотя бы в основной поток GetMessage/DispatchMessage ложить свои сообщения?
Другими словами, если ты попробуешь сделать свой актив-х-контрол, создать в нём поток и из этого потока пытаться вызвать событие в Axapta (как это в общем то делает OPOS драйвер от Symbol) - приложение 100%-но рухнет...... если не одно НО... которое я всё таки вспомнил, слава богу опыт програмирования COM-объектов имеется.

ИТАК, данную проблему можно прекрасно разрешить если вспомнить про т.н. "apartment model". Если кого то интересует могу поподробнее объяснить.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
«Обрезание» длинных штрих-кодов gl00mie DAX: Программирование 7 17.10.2008 18:16
Подвисает сканер штрих-кодов KingPeas DAX: Программирование 0 10.10.2008 09:01
AX 4.0 + сканеры штрих кодов Vitals DAX: Прочие вопросы 11 20.06.2008 17:35
Еще раз про сканеры штрих кодов doo DAX: Программирование 14 22.12.2006 15:47
Нужен совет по сканеру штрих-кодов slava09 DAX: Программирование 5 27.01.2005 03:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:33.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.