Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контролы и Потоки 
V
    Опции темы
DenwerD
Дата 7.5.2008, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.3.2008

Репутация: нет
Всего: нет



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

Исходные данные:
Есть 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. Как можно этого исбежать?

Заранее благодарю.
PM MAIL   Вверх
amarenkov
Дата 7.5.2008, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



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

P.S. Щас тебя заклюют сообщениями: "Надо поиском пользоваться" smile.
PM MAIL ICQ   Вверх
DenwerD
Дата 7.5.2008, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.3.2008

Репутация: нет
Всего: нет



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

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

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


PM MAIL   Вверх
DenwerD
Дата 7.5.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.3.2008

Репутация: нет
Всего: нет



amarenkov, спасибо тебе за подсказку, проблему решил
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.