|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.10.2010, 09:08 | #1 |
Форумчанин
Регистрация: 24.03.2009
Сообщений: 375
|
Событийная модель в C#
Привет!
Недавно добрался до изучения событий в C# и в связи с чем возникло некоторое недопонимание, может быть растолкуете. Если брать обычные win приложения, то там все понятно: любой объект в контексте процесса, способен посылать записи/объекты типа "сообщения" в систему, система при этом заносит их в очередь, созданную для процесса приложения и формирует объект "событие" с занесением в журнал событий. Затем в главном потоке крутящаяся процедура-"окна" выдирает из очереди сообщение и обрабатывает его. Реализация же на C# с делегатами демонстрирует, что ни каких сообщений не посылается, а всего лишь в нужный момент вызывается функция-"обработчик", по адресу, который передается при создании объекта делегата. Причем в VStudio проследить это дело как-то не получается или просто не знаю как. Либо они компилятор так замудрили, что уже не понятно, во что на самом деле превращается мой код в JIT-е. По идеи сама framefork работает в контексте системы и следовательно должна иметь возможность регистрировать мои собственные типы сообщений, но получается, что даже сообщение и событие у них что-то единое и не возможно выдернуть стандартные для сообщения L и W параметры. Что же там на самом деле происходит? |
28.10.2010, 13:59 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
На сколько я знаю, в случае с WinForms, все эти делегаты по сути являются обёртками над сообщениями WinAPI. Ну где-то там в недрах есть метод типа WinMain из С++:
Код:
|
30.10.2010, 18:08 | #3 |
Пользователь
Регистрация: 16.03.2010
Сообщений: 58
|
делегат врятли обертка.. но events C# думаю базируются на WM_*** просто с грамотными враперами, без этой шляпы)
|
01.11.2010, 09:00 | #4 |
Форумчанин
Регистрация: 24.03.2009
Сообщений: 375
|
ну все равно, как-то это все подозрительно....
чего-то они не договаривают |
01.11.2010, 09:12 | #5 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
Далее, верно, фреймворк проверяет рабочую платформу, и в соответствии устанавливает определенный цикл обработки сообщений, системных (хочется верить что это именно так). Далее, делегат = обработчик, не равны. Т.к., делегат, это по сути список обработчиков, -= удаление, += добавление. Собственно так и не ясно, что вы хотите, чего вам не хватает? |
|
02.11.2010, 08:19 | #6 |
Форумчанин
Регистрация: 24.03.2009
Сообщений: 375
|
наверное полного контроля за ситуацией, что не дают
получается даже прерывания поставить нельзя - "int 3" |
02.11.2010, 08:30 | #7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Поставить прерывания в Win32/64 ? Вы серьезно что ли? Я вообще чег то не понял, причем Это вообще тут?!
|
02.11.2010, 10:44 | #8 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
ТС, вы сейчас как бы в иной позиции, чем скажем ассемблерщики. почитайте что такое .NET, половина вопросов отпадет. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Фреймовая модель | Шушелла | Помощь студентам | 0 | 15.05.2010 00:20 |
3d модель в Delphi | KISSkaэсМЕральда | Помощь студентам | 6 | 01.04.2010 17:25 |
Модель данных | fobass | SQL, базы данных | 3 | 19.01.2010 22:09 |
Модель амебы. | Alex Cones | Свободное общение | 25 | 14.01.2010 22:20 |
Даталогическая модель | Шульц | БД в Delphi | 0 | 27.12.2008 23:44 |