|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
||||||||||||||||
Событие другого потока (написание клиента на сокетах)07.12.2011, 13:54. Показов 13699. Ответов 23
Метки нет (Все метки)
Добрый день. Мне нужно разобраться с сокетами, точнее - написать клиента на сокетах. Я использую синхронный TCP сокет. В своем приложении я создаю экземпляр класса Client и вызываю метод Start(), который настраивает сокет и запускает Raid() в новом потоке. Raid() - это метод прослушивания порта.
Я знаю про:
Т.е. чтобы второй листинг работал. Подскажите пожалуйста, куда смотреть?
0
|
||||||||||||||||
| 07.12.2011, 13:54 | |
|
Ответы с готовыми решениями:
23
По нажатию на кнопку из другого потока, нужно чтобы 2 потока останавливались Как из одного потока узнать состояние другого потока Вызывть метод одного потока из другого потока |
|
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
|
||||||
| 07.12.2011, 14:34 | ||||||
|
а если чуть-чуть поправить
0
|
||||||
|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
|||||||
| 07.12.2011, 14:40 [ТС] | |||||||
0
|
|||||||
|
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
|
|
| 07.12.2011, 15:37 | |
|
antsa, ну если вы читали внимательно справку, то обращение к визуальным компонентам из потоков, отличных от главного, запрещается, и с этим мы ничего не можем сделать.
0
|
|
|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
||
| 07.12.2011, 17:27 [ТС] | ||
|
Вопрос в том как передать данные из одного потока в другой?
0
|
||
|
|
|
| 07.12.2011, 18:17 | |
|
Я тоже задавался этим вопросом. И мне тоже интересно, как же сделать, чтобы событие отрабатывало в основном потоке, даже если оно инициировано в другом. Я так понимаю, что к примеру создали мы класс Client в основном потоке программы, а метод уже работает в другом потоке и оттуда инициирует событие и кажись я нашёл что-то по этой теме, но как использовать пока не разобрался. Я как понял этот интерфейс как раз помогает иницировать событие в том потоке, в котором создан объект (ну мы же предполагаем, что Client создан в основном потоке).
ISynchronizeInvoke Не по теме: И не понимаю, зачем у каждого события в начале писать Event? Ведь спутать нереально нисчем и без этого префикса в названии. Не говорю, что у вас также, но вспомнился случай, когда один человек именовал переменные: int iIntegerA; int iIntegerB, double dDoubleSomeVariable; и т.д. Кстати на этом форуме :).
0
|
|
|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
||
| 07.12.2011, 18:37 [ТС] | ||
|
Не по теме: Не знаю. Так во всех книгах, я думал это правила хорошего тона для событий. У microsoft еще есть рекомендации как называть делегаты и переменные.
0
|
||
|
|
|||||||
| 07.12.2011, 18:46 | |||||||
|
Вот посмотри внимательно на то, как тут инициируется событие да и вообще на остальные изменения, я думаю это более правильно, хотя если и я где-то что-то не верно сделал, то пишите, если дельный совет будет, то прислушаюсь
(я к тому, что я сам хочу делать правильно, а не типа я такой супер профи, что может быть сам "Я" \m/ прислушаюсь ).
Добавлено через 6 минут
0
|
|||||||
|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
||
| 08.12.2011, 05:29 [ТС] | ||
|
Там слева есть "Правила именования": Соглашения о написании прописными буквами Общие соглашения об именовании Имена сборок и библиотек DLL Имена пространств имен. Имена классов, структур и интерфейсов Имена членов типа Имена параметров Имена ресурсов
0
|
||
|
|
||||||||||||||||||||||
| 08.12.2011, 05:58 | ||||||||||||||||||||||
|
Ну вот оттуда же: В именах обработчиков событий (делегатов, используемых как типы событий) используйте суффикс "EventHandler".
Я и назвал в своём примере (правда без Event):
Хотя походу вполне нормально будет написать: ReceiveMessageEventHandler. Можно вообще делегат не объявлять, а так написать:
Кстати, ссылку передавать на инициирующий событие объект, тоже из рекомендаций. Как раз EventHandler<string> передаёт параметр object sender и string Добавлено через 8 минут Короче можно переписать в такой вариант. Но не уверен есть ли острая необходимость оборачивать аргумент в класс, хотя по рекомендациям так надо делать:
0
|
||||||||||||||||||||||
|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
|
| 08.12.2011, 06:08 [ТС] | |
|
Меня больше волнует почему не работает. И как вызвать событие из другого потока. Я уже 3 день сижу...
0
|
|
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
||||||
| 08.12.2011, 06:22 | ||||||
|
твоя проблема не в событии а в том что ты обращаешься к визуальным элементам из фонового потока
вот решение
label.Invoke - выпонение делегата в контексте главного потока
0
|
||||||
|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
|
| 08.12.2011, 06:30 [ТС] | |
|
Да, это мы знаем. В том то и соль. И хочу передать событие в другой поток. Чтобы потом просто на него подписываться. Сейчас делаю Invoke для своего класса.
0
|
|
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
||
| 08.12.2011, 06:50 | ||
|
зачем писать Invoke для класса???
тебе же русским языком сказано
Выход из ситуации таков... если есть фоновый поток который работает с визуальными элементами то обновлять данные визуального элемента нужно ТОЛЬКО через метод Invoke текущего визуального элемента передавая методу Invoke делегат и параметры делегата для обновления P. S. кстати подписываться можно на любое событие любого класса из любого потока, правда не факт что не будет проблем с синхронизацией
0
|
||
|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
|||||||||||||
| 08.12.2011, 09:43 [ТС] | |||||||||||||
|
Нет, Вы меня не поняли. Я знаю что так можно делать. Но дело в том, что мой класс Client будут использовать сторонние разработчики, и хочу предоставить им только один метод SendMessage для отправки сообщения. И одно событие - подписался на него, оно произошло - данные на сокет пришли, ты просто берешь их и пользуешься. Не хочется усложнять им жизнь. хочется что бы выглядело как раз так. Добавлено через 2 часа 47 минут Задача РЕШЕНА!!! С помощью BackgroundWorker.
Частично использованы материалы: backgroundWorker и формы... И да!
0
|
|||||||||||||
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 08.12.2011, 14:21 | |
|
мда.... месье знает толк в извращениях, мой тебе совет почитай про синхронизацию и пул потоков, асинхронные события тогда может поймешь что для твоей супер - пупер задачи с головой хватит C# 2.0, код решения не стал делать ибо ты все равно не поймешь как он работает
0
|
|
|
215 / 215 / 20
Регистрация: 18.05.2010
Сообщений: 865
|
|||
| 08.12.2011, 14:38 | |||
|
1. что значит передать данные с одного потока в другой? у потока есть данные? может данные с одного экземпляра класса в другой? тут вообще нету проблем, присваивай прямо и все. (за исключением визуальных объектов) 2. а зачем выполнять именно в том потоке? если конечно это не визуальный элемент. можно просто синхронизировать доступ. Я не вижу причин зачем заморачиваться и выполнять все в одном потоке !!! я внимательно читаю тему но что то не доходит до меня зачем такие заморочки.
0
|
|||
|
|
|||||||||||
| 08.12.2011, 20:56 | |||||||||||
1
|
|||||||||||
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
||||||
| 09.12.2011, 04:09 | ||||||
|
эххх не хотелось особо заморачиватся но раз пошла такая пляска держите
3
|
||||||
|
19 / 19 / 4
Регистрация: 04.07.2010
Сообщений: 86
|
||||
| 09.12.2011, 05:23 [ТС] | ||||
|
Спасибо!
0
|
||||
| 09.12.2011, 05:23 | |
|
Помогаю со студенческими работами здесь
20
Управление объектами потока из другого потока Написание прокси сервера на сокетах. Проброс сообщений основному серверу и возврат значений через прокси Написание клиента Написание бота на сокетах: быть или не быть? Написание IRC клиента Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|