Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
5 / 5 / 1
Регистрация: 07.09.2009
Сообщений: 65
1

Передача сообщений главному окну из потока

07.09.2009, 00:22. Просмотров 3166. Ответов 9
Метки нет (Все метки)

Недавно стал осваивать C#

Вопрос: привык передавать сообщения главному окну из потока посредством PostMessage с созданием своих кодов сообщений (для отображения счетчиков на форме главного окна и пр.). Может быть, в C# есть более "продвинутые" методы для синхронизации с главным окном?

Спасибо за ответ
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2009, 00:22
Ответы с готовыми решениями:

QWizardPage, Послать сигнал главному окну
В главном окне создаю объект QWizard recWiz = new RecoveryWizard(); connect(recWiz,...

Отправка сообщения главному окну (SendMessage) из оконной процедуры дочернего окна
При нажатии Энтера в дочернем окне управления hwndEditFKern, главное окно hwnd должно обработать...

Немодальный диалог, передача переменной главному диалогу
вобщем столкнулся с такой проблемкой: по нажатию на кнопке открываю не модальный диалог...

Отправка сообщений чужому окну!
В общем хочу сделать чтобы в блокнот выводился текст программно НЕ СОХРАНЯЛСЯ ИЗ МЕМЕО А ИМЕННО...

9
1476 / 743 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
07.09.2009, 00:29 2
Вот почитайте статьи:
http://www.gotdotnet.ru/LearnD... s/599.aspx
http://www.gotdotnet.ru/LearnD... s/598.aspx
http://www.gotdotnet.ru/LearnD... s/596.aspx
1
5 / 5 / 1
Регистрация: 07.09.2009
Сообщений: 65
07.09.2009, 02:09  [ТС] 3
Спасибо за статьи

Про методы Invoke(), BeginInvoke() я кое-что слышал, теперь увидел простой пример

Но вот вопрос: чем это лучше PostMessage? Я действительно не понимаю. Имеется ввиду, разумеется, вызов метода с максимум двумя целочисленными параметрами (у меня, по крайней мере, 99% вызовов главного окна из потока всегда были именно такие). Написал обработку сообщения в главном окне и все... Одновременно и инкапсуляция алгоритма обработки вызова оказалась в главном окне, а не в потоке (по большей части так и надо).

Есть ли тут какие-то подводные камни? И насколько это "архаично"?
0
304 / 157 / 11
Регистрация: 07.06.2009
Сообщений: 538
07.09.2009, 02:23 4
в таких случаях в класе инкапсулирующем работу с потоком объявлял событие, которое вызывается при изменении счетчика. а форма на это событие подписывается и сама себе шлет сообщение в основной поток.
0
5 / 5 / 1
Регистрация: 07.09.2009
Сообщений: 65
07.09.2009, 02:30  [ТС] 5
Естественно, можно и так. А зачем? Почему сразу из потока не слать сообщение?
0
304 / 157 / 11
Регистрация: 07.06.2009
Сообщений: 538
07.09.2009, 03:11 6
нужно вникать в твою модель и смотреть что как и откуда слать правельнее. и стоит ли вообще чтото слать из того потока. может достаточно будет заюзать опрашивающий таймер.
0
5 / 5 / 1
Регистрация: 07.09.2009
Сообщений: 65
07.09.2009, 03:20  [ТС] 7
Да нет, опрашивающий таймер не подойдет (кроме того, это почти всегда некрасивое решение). Ты все правильно написал в прошлом посте - то, что надо. Я просто задал вопрос - почему не сразу PostMessage? Что касается конкретно моей задачи, она уже реализована с PostMessage и вроде работает... Я сейчас не имею возможности общаться непосредственно с другими C#-программистами и меня интересует, так сказать, майнстрим, и , в частности, практика использования непосредственной передачи сообщений в C#, и, если ее нет, то почему? Есть ли подводные камни или это просто мода? Твое решение, на мой взгляд, лучше моего только тем, что классу, инкапсулирующему поток, не нужно видеть ссылку на главное окно. Но для таких классов это не так уж и важно, как правило им от главного окна нужно много чего и возможность их повторного использования мала, это же не библиотека математических функций...
0
304 / 157 / 11
Регистрация: 07.06.2009
Сообщений: 538
07.09.2009, 03:37 8
Цитата Сообщение от igorx2009 Посмотреть сообщение
Я просто задал вопрос - почему не сразу PostMessage
потому что не удобно. сделали же Form.Invoke чтобы был понятнее код.

Но для таких классов это не так уж и важно, возможность их повторного использования мала
все равно зачем говнокодить?

Добавлено через 8 минут
можешь слать, никто не запрещает вроде, но будет чтото наподобие goto. когда нужно будет скакать из одного места в другое(из метота паралельного потока в метод обработки сообщений, а от туда на обработчик). а с invoke все на виду
0
5 / 5 / 1
Регистрация: 07.09.2009
Сообщений: 65
07.09.2009, 03:38  [ТС] 9
Удобно/неудобно - это дело вкуса. Мне удобнее с PostMessage (это ближе к реальной работе Windows, а значит, на мой взгляд, понятнее).

По поводу того, что с invoke все на виду - это только в том случае, если инкапсуляцию производить в потоке. На мой взгляд, ее почти всегда лучше делать там, куда обращаются, а не там, откуда обращаются (см., напр., сравнение кодов 3 и 4 по первой ссылке в начале темы). Но это опять дело вкуса.
0
304 / 157 / 11
Регистрация: 07.06.2009
Сообщений: 538
07.09.2009, 03:39 10
это ближе к реальной работе Windows
здесь .net
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2009, 03:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Периодическая генерация событий сообщений окну - как реализовать?
Почитал немного про создание оконных приложений - очень интересно. Даже пятнашки, думаю, могу...

Как передать сообщение окну из другого потока?
В общем пытаюсь передать сообщение окну из другого потока: Запускаю поток так: std::thread...

Как взять сообщение окну из потока и обработать его?
Всем привет, как на c# взять сообщение окну из потока и обработать его? (Структура MSG, ил что-то...

Передача параметра дочернему окну
Привет Помогите пожалуйста. Есть диалоговое окно, в нем кнопка "Х", при нажатие на нее создается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.