COM-драйвер блокирует основную форму
От: devision  
Дата: 19.03.09 11:32
Оценка:
Здравствуйте!
В программе (C#) используется COM-dll драйвер ус-ва, который реализует протокол МОДБАС для связи через ком-порт.
Во время считывания инфы через драйвер в асинхронном таймере (System.Threading.Timer), блокируется основная форма приложения.
Если закомментить код, работающий с драйвером, блокировки не происходит.
Если кто-то сталкивался с подобной проблемой, прошу помочь или навести на мысль как с этим бороться.
Спасибо!
com dll threading
Re: COM-драйвер блокирует основную форму
От: Аноним  
Дата: 19.03.09 11:36
Оценка:
Можно для COM драйвера указать другую потоковую модель!
Re[2]: COM-драйвер блокирует основную форму
От: devision  
Дата: 19.03.09 11:49
Оценка:
Пробовал создавать класс-обертку для драйвера (не переписывал RCW конечно), который работал с драйвером в отдельном потоке, задавал при создании разные апартаменты, однако блокировки никуда не делись.
Re[3]: COM-драйвер блокирует основную форму
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 19.03.09 12:57
Оценка:
Здравствуйте, devision, Вы писали:

D>Пробовал создавать класс-обертку для драйвера (не переписывал RCW конечно), который работал с драйвером в отдельном потоке, задавал при создании разные апартаменты, однако блокировки никуда не делись.


Попробуй сменить COM apartment на MTA
[КУ] оккупировала армия.
Re[4]: COM-драйвер блокирует основную форму
От: devision  
Дата: 19.03.09 13:08
Оценка:
K>Попробуй сменить COM apartment на MTA
При создании потока пробовал указывать и STA и MTA — разницы, увы, не было
Re[5]: COM-драйвер блокирует основную форму
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 19.03.09 13:28
Оценка:
Здравствуйте, devision, Вы писали:

K>>Попробуй сменить COM apartment на MTA

D>При создании потока пробовал указывать и STA и MTA — разницы, увы, не было

При STA ты _создавал_ объект в том же потоке, в котором потом работал с ним? (т.е. не в главном GUI-потоке)
[КУ] оккупировала армия.
Re[6]: COM-драйвер блокирует основную форму
От: devision  
Дата: 19.03.09 13:55
Оценка:
K>При STA ты _создавал_ объект в том же потоке, в котором потом работал с ним? (т.е. не в главном GUI-потоке)
Спасибо за подсказку ) Действительно, объект создавался в GUI-потоке. Если создавать его в методе, на который указывает ThreadStart (к примеру DoWork()), главная форма не блокируется в независимости от типа апартаментов, указанных при создании потока. Но в этом случае возникает другой вопрос — как обращаться к методам этого объекта, инициализированного в DoWork(), из GUI-потока?
Re[7]: COM-драйвер блокирует основную форму
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 19.03.09 16:58
Оценка: 2 (1)
Здравствуйте, devision, Вы писали:

D>Спасибо за подсказку ) Действительно, объект создавался в GUI-потоке. Если создавать его в методе, на который указывает ThreadStart (к примеру DoWork()), главная форма не блокируется в независимости от типа апартаментов, указанных при создании потока. Но в этом случае возникает другой вопрос — как обращаться к методам этого объекта, инициализированного в DoWork(), из GUI-потока?


Напрямую никак — только через некую диспетчеризацию (например, организовать очередь сообщений в этом потоке, и ставить из гуйного потока туда мессаги, а затем забирать результаты).
[КУ] оккупировала армия.
Re[8]: COM-драйвер блокирует основную форму
От: Аноним  
Дата: 20.03.09 08:24
Оценка:
Спасибо за совет )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.