Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Контролы и Потоки


Автор: DenwerD 7.5.2008, 08:01
Здравствуйте, господа. 
Возникла проблема, надеюсь поможете разобраться.

Исходные данные:
Есть Windows Форма, на ней ListBox. Есть приложение UdpServer (собственный класс). UdpServer исполняется в главном потоке в месте с формой. UdpServer агрегирует несколько объектов класса UdpListener у которых есть метод Start. Метод Start каждого объекта UdpListener исполняется в отдельном потоке, которые запускает UdpServer. При вызове UdpListener.Start()  генерируется событие onStart(string msg), обработчиком которого является метод UdpServer.item_Start(msg), который в свою очередь генерирует  событие onServerItemStart (msg) обработчиком которого является метод формы Form1.onUdpServerItemStart(msg).
onUdpServerItemStart(msg) - должен тупо добавлять в ListBox строку msg и все, но когда он пытается  сделать - возникает исключение, цитирую : "Cross-thread operation not valid: Control 'logBox' accessed from a thread other than the thread it was created on."

Вопрос:
1. Почему так происходит т.е. Что я не верно длаю?
2. Как можно этого исбежать?

Заранее благодарю.

Автор: amarenkov 7.5.2008, 08:08
DenwerD(, поищи на слово Invoke(). Ты должен менять контролы в том потоке, в котором они созданы. Об этом и ошибка. У каждого контрола есть метод Invoke(), выполняющий аргумент в потоке-создателе компонента.

P.S. Щас тебя заклюют сообщениями: "Надо поиском пользоваться" smile.

Автор: DenwerD 7.5.2008, 08:26
Цитата(amarenkov @ 7.5.2008,  08:08)
DenwerD(, поищи на слово Invoke(). Ты должен менять контролы в том потоке, в котором они созданы. Об этом и ошибка. У каждого контрола есть метод Invoke(), выполняющий аргумент в потоке-создателе компонента.

P.S. Щас тебя заклюют сообщениями: "Надо поиском пользоваться" smile.

Получается что метод(исполняемый в потоке "a")  генерирует событие, а обработчик этого события так же исполнится в этом потоке ("а")?  Правильно я понимаю?


Автор: DenwerD 7.5.2008, 08:42
amarenkov, спасибо тебе за подсказку, проблему решил

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)