![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
radiks |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.5.2006 Репутация: нет Всего: нет |
Приведите, пожалуйста, простой пример работы с событиями.
Например, как в реальном времени в textbox'е отобразить изменение в цикле переменной |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 2 Всего: 98 |
А ты книгу какую-нить читать не пробовал?..
+ не понятно зачем в описанной задаче события -- оно и без них прекрасно делается... ++ ты не поверишь, но в MSDN'е этих примеров -- хоть засыпся: http://msdn2.microsoft.com/en-us/library/a...739(VS.71).aspx -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
radiks |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.5.2006 Репутация: нет Всего: нет |
спасибо за ответ.
Читать-то я читал, да только о делегатах и событиях там в консоли примеры... Вообще-то я начинающий в C# так, что не взыщите ![]() |
|||
|
||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
2radiks Вот тебе пример работы с событиями без консоли, хотя в следующий раз тебе следует более подробно объяснять чего ты в итоге хотел бы увидеть, а не играть с нами в "Битву экстрасенсов":
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
radiks |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.5.2006 Репутация: нет Всего: нет |
Вообще-то задача такая: прочитать текст из файла и в реальном режиме отображать каждую строку на форме (именно построчно, а не весь текст сразу). Я так понимаю без делегатов и событий тут не обойтись.
Вроде все сделал работает, но в контроле отображается только одна строка. Срабатывает только тогда, когда я это событие отрабатываю через таймер... Спасибо за пример. Буду разбираться |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
Да что ты, тут всё гораздо проще:
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
radiks |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.5.2006 Репутация: нет Всего: нет |
А без таймера это можно реализовать?!
Через события. При чтении новой строки вызвать событие, и через делегат отобразить строку. Или я чего-то не понимаю? |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
можно. И это будет самым правильным (ИМХО) способом.
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Не понимаю зачем нужны здесь события
![]() События нужны только в том случае когда объект выбрасывающий событие !ничего! не знает про тех кто его будут обрабатывать. Тут же все друг друга знают и все друг друга видят. Зачем здесь событие?
Налицо две операции: одна читает данные с файла, другая обновляет форму. И проблема заключается в том, что GUI (форма) просто не отрисовывается пока весь файл не прочтется, так как операции идут одна за другой, а не параллельно. Как добиться параллельного использования: 1) Либо использовать BackgroundWorker (именно он наиболее приспособлен для реализации многопоточности в GUI) 2) Либо использовать псевдомногопоточность реализуемую Application.DoEvents() 3) System.Threading.Thread даже не стоит и рассматривать. Не нужно решать высокоуровневые (GUI) вопросы низкоуровнемыми инструментами. Второй наиболее быстрый по скорости реализации, первый все же общепринятый подход. Код для второго случая:
Добавлено через 1 минуту и 36 секунд Скопировал бездумно код. ИМХО, нужно не заменять текст, а накапливать его в текстбоксе:
|
||||||
|
|||||||
tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
ммм. не вчитался в тему... Согласен.
будет "грузить" форму
не такой уж Thread и низкоуровневый ![]() Это сообщение отредактировал(а) tol05 - 8.4.2008, 11:12 -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Я ее тоже не сразу понял ![]() Не согласен. DoEvents() это всего лишь передача процессорного времени оброботчику сообщений приложения. И если делать это почаще (а ReadLine и сеттер Text работают очень быстро), то никто ничего не заметит. Но еще раз говорю: DoEvents() -- корявка, которая решает только небольшой круг задач многопоточночти для форм, но зато их решает просто замечательно (как с точки зрения скорости получения результата, так и с точки зрения понятности). И для этой задачи он идеален. Но повторю: только для этой (выполнить асинхронно !маленький! кусок функциональности). Ну да, есть еще ниже его. Но все же для GUI специально сделали Воркер (о котором у меня самые положительные впечатления). Не нжуно заморачивать на делегатах, инвоках, синхронизации и тыды... |
|||
|
||||
radiks |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.5.2006 Репутация: нет Всего: нет |
Спасибо за разьяснения. А можно все-таки примерчик с делегатами.
![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
radiks, они не смогут решить проблему. Они не дают ассинхронности. Они только добавляют возможность абстрагироваться от тех кто будет обрабатывать твое сообщение.
|
|||
|
||||
radiks |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.5.2006 Репутация: нет Всего: нет |
Добавил Application.DoEvents()... и ничего не изменилось
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Смутил код:
А почему if, а почему =?
Может я не понял задачу? Тебе что нужно? 1) Добавлять каждую новую строку к уже прочитанному тексту? //тогда просто замени if на while 2) Показывать только последнюю прочитанную строку (именно поэтому if и =)? // тогда зачем тебе это? ты все равно ничего не успеешь прочитать не замедляя процесс, а в этом случае без таймера не обойтись. P.S. Если все же вариант 2: source777, где ты учился на телепата? |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |