Добавил:
2200 7008 9480 6099 TKFF БЛАГОДАРНОСТЬ МОЖНО ТУТ ОСТАВИТЬ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИПЛОМ 2025 / 4 курса_МТУСИ / 1 КУРС / Информатика / С# для чайников - Мюллер.pdf
Скачиваний:
0
Добавлен:
04.06.2025
Размер:
53.3 Mб
Скачать

partial лтиыпмиенцйно кно ноЧотойилноmоЧроооаЧилли2 длниЧория йилноаЧиллинойен зпно риадеоим миаЧе Forml . Designer . cs, то, носпа анеенля млmалтем озоысеминеЧесе ерааваоыйе м дирроа оЧимея е.е

сиыозси.лло

т кнонл миаЧлs нозпmсоаЧЧтлнса соминоmлозпная>в,илнайрпе

тЧиллп зпЧа

ммедерпм вп tезвдра mоымоЧятнсиызано тЧилл нейдл дмлня

а зоЧее миаЧинаu оонmаЧ янос оеоесаслен миаЧ Forml . Designer . cs, ниа йно реЧоыяреmолседлнмерроаынерянотоделодесйи.ааля м ренс в нойоо нода, маwасоминоноЧотооmолседомирроuвтiиорое ре онооланляа миаЧл Forml . cs, тоноспа mседлнимЧяенлозоа жПii йилнотодие

Жизненный цикл делегата

х#А#,3

,(---!.,(-

<!.е .!.!,03

А,#.-.(-р1#.

-!2!3 ,(deр(trу)0#trу(-.(6(der

Б#ББ!F!

(.р( .#р#F(.

 

 

ПИtTДеnегат teProgressCallback опредеnяется в начаnе класса:

О ,

Метод, на который может "указывать"данный делегат, должен не иметь параметров и не должен возвращать значение. После ключевого слова delegate указывается сигнатура метода, на который можетуказывать делегат, т.е. его возвращаемый тип и количество, порядок и типы пара­ метров. Делегаты не обязаны быть void - вы можете написать деле­ гаты, которые возвращают любой тип и принимают любые аргументы.

Объявление делегата определяет тип, как этоделает, например, объяв­ ление class Student { . . . ) . Вы можете объявить делегат как puЫic, internal, protected или даже при необходимости как private.

Неплохо добавить к имени типа делегата Callback - само собой, это просто совет, но никак не требование языка программирования.

СОВЕТ

2. Создается экземпnяр деnегата и передается методу DoSomething Lengthy ( ) в методе buttonl_Click

п

.

О.

Этот делегат "указывает" на метод класса this (this в данном случае писать не обязательно). Для указания на метод другого класса необхо­ дим экземпляр этого класса (если это метод экземпляра), и метод nepe­

'i: o дается следующим образом:

ГЛАВА 1 9 Делегирование событий 441

SomeClass s c = new SomeClass ( ) ; UpdateProgressCallback callback =

new UpdateProgressCallback ( sc .DoUpdate) ;

Но если это статический (static) метод, то передача его осуществля­ ется так:

UpdateProgressCallback callback =

new UpdateProgressCallback ( SomeClass . DoUpdate) ;

При создании экземпляра передается только имя метода, но не его па­ раметры. Методу DoSomethingLengthy ( ) передается экземпляр деле­

ЗАПОМНИ! ИОНгата callback (который указывает на метод).

Ваш метод DoSomethingLengthy ( ) выполняет некоторую "долгую работу" и nериодически приостанавливается, чтобы при помощи метода обратного вызова сообщить форме, что она может обно­ вить индикатор хода выполнения задания.

Вызов делегата в методе DoSomethingLengthy ( ) выглядит так же, как и вызов метода (при необходимости - с передачей параметров): updateProgress ( ) ; // Вызов переданного экземпляра делегата

Метод DoSomethingLengthy ( ) имеет следующий вид:

 

private void

 

 

r

DoSomethingLengthy (UpdateProgressCallЬack

int duration = 2000 ;

 

 

int updateinterval = duration / 10;

 

for ( int i

= 1; i <= duration; i++ )

 

{

Console .WriteLine ( "Heкиe действия" ) ;

 

 

 

 

// Периодическое обновление формы.

!= null )

 

if ( ( i

% updateinterval )

= О & & updateProgress

 

{

() ; //

Вызов делегата .

 

 

 

 

Наш "длинный процесс" на самом деле ничего такого важного не де­ лает. Он устанавливает переменную duration равной 2000 итераций цикла - несколько секунд времени выполнения, этого более чем до­ статочно для демонстрационной программы. Затем метод вычисляет "интервал обновления" в 200 итераций путем деления общей продол­ жительности на десять. После этого цикл for выполняет эти 2000 ите­ раций. На каждой из них цикл проверяет, не пора ли обновить интер­ фейс. В большинстве случаев никакое обновление не выполняется. Но когда условие if становится истинным, метод вызывает экземпляр UpdateProgressCallback, который был передан ему в качестве пара­ метра updateProgress. Выражение i%updateinterval, которое пред­ ставляет собой получение остатка от деления, становится равным О (т.е. соответствует условию if) каждые 200 итераций.

зс щеоaаАеА фВаоSбpdтd(ьоpсa(дeпppдлАП(дm(п ллa( дeпвaлАвпА.оА

Соседние файлы в папке Информатика