![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Конектюсь к серверу.
Как отправлят сообщения и как принимать разобрался. Но проблема в другом. При асинхроном принятии данных, фуннкция которая запускается для обработки - работает в другом потоке, нежели остальное приложение и следовательно не может получить прямо доступ к его свойствам. То есть собщения я получаю, а вывести не могу. Вот пример
|
|||
|
||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Проблема с приемом решается через свойство InvokeRequired тект бокса
А вот как отправить... потому что данный вариант работает... сообщения через сокет на сервер льются.. а вот обратно никак ничего не приходит |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Проблема в том, что ответ вообще не приходит, или что в отдельном потоке ? Если про поток, то ты сам только что ответил: св-во InvokeRequired и метод Invoke в помощь. -------------------- ![]() |
|||
|
||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
в том что вообще не приходит .... вот эта функция, кот в отдельном потоке ничего не принимает
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
А у меня работает. То бишь данные приходят в буфер.
-------------------- ![]() |
|||
|
||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
а можно пример кодика? асинхронного.... я сделал синхронный прием.. проверяю наличие инфы каждую секунда и гружу если есть, все работает
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Твой пример - рабочий (за исключением записи в листбокс). С сокетами много не работал, а разбираться особо не хочется
-------------------- ![]() |
|||
|
||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
... понял ... а не рабочесь примера в том, что он только 1 раз принимает данные асинхронно.. а потом замолкает
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Ну так ты ведь только 1 раз Connect вызываешь, не будет же он без конца ответы принимать Или просто не все данные приходят ? Тогда нужно сделать цикл и вызывать socket.Receive до тех пор пока он не вернёт 0. З.Ы. ещё не мешало бы в конце ReceiveData добавить вызов socket.EndRecieve(), может в этом проблема. -------------------- ![]() |
|||
|
||||
| albert21 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 10.1.2006 Репутация: нет Всего: нет |
А можно поподробнее? У меня схожая проблема, не могу добраться до грида --------------------
http://www.certifications.ru/publicresults.php?tu_id=45939 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
объясняю подробнее: 1) работать с визуальными контролами и формами из нескольких потоков нельзя, валится исключение InvalidOperationException при попытке вызвать практически любой метод или свойство 2) поток, желающий что-либо сделать с контролом/формой, должен вызвать у контрола/формы метод Invoke, передав ему делегат на любой метод 3) контрол/форма вызовут метод по делегату, причём этот метод уже будет работать в "родном" потоке контрола/формы, что позволит данному методу безопасно работать со свойствами и методами контрола/формы В двух словах, всё что нужно - это вызвать метод Invoke контрола (или формы) и передать ему делегат на метод, выполняющий всю работу. -------------------- ![]() |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
mr.DUDA, неразу такого не делал, но вопрос все же интересен
А как передеть значение из потока.... Писал, писал и подумал: "дай гляну на этот метод invoke", а там как раз все и написано:
Только вот что получается. Если метод планируестся вызываться в invoke, то метод заранее должен уметь переконвертить из object в реальный тип, или это конвертирование проходит автоматически? Опять поэкспериментировал и оказалось, что преобразование идет автоматом, хоть это радует P.S. Еще замечание. Получается компилятор не может проверить соответствие типов Даже не смог проверить количество аргументов Хм.. А зачем ему тогда нужено явно объявлять делегата Наверное, invoke всетки хитрый метод. И именно он автоматом конвертирует типы и проверяет количество аргументов, на основании полученного делегата |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
ivashkanet, в Invoke можно передать делегат любого типа. Что мешает, например, передать делегат на метод, принимающий string или массив Rectangle-ов, или на Dictionary<string,int> и так даее ? В конце концов, можно объявить делегат с нужным набором аргументов.
-------------------- ![]() |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
mr.DUDA, эт я понял
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |