Будут ли события EventHandlers, связанные с таймером, оставаться там после возникновения тика? - PullRequest
0 голосов
/ 08 ноября 2010

Допустим, я привязываю обработчик события к событию Timer Tick.

Timer myTimer = new Timer();
myTimer.Tick += new EventHandler(TickHandler);
myTimer.Start();

Как долго связанный EventHandler будет оставаться привязанным к Timer? Будет ли оно удалено, когда произойдет Tick? Будет ли он удален, когда я myTimer.Stop()?

Ответы [ 4 ]

2 голосов
/ 08 ноября 2010

Он будет оставаться до тех пор, пока объект не будет ликвидирован или вы не удалите обработчик.

0 голосов
/ 08 ноября 2010

Он следует правилам, как любое событие .NET. Он будет оставаться прикрепленным к объекту, пока вы не удалите его явно. Конечно, если сам таймер уничтожен, обработчик больше не будет вызываться.

0 голосов
/ 08 ноября 2010

Обработчик событий будет связан до тех пор, пока вы не отсоедините его от объекта, или пока объект не будет удален.

отсоединение:

myTimer.Tick -= (TickHandler);
0 голосов
/ 08 ноября 2010

Обработчик будет там и будет запускаться каждый раз, когда происходит Tick. Если вы позвоните myTimer.Stop(), он больше не будет Tick, поэтому обработчик не сработает, но все равно будет там. Если вы хотите вызвать Халднера только один раз, вы можете либо удалить его явно, либо остановить таймер. Он будет там, пока вы не отсоедините его с помощью myTimer.Tick -= new EventHandler(TickHandler); или ваш объект не будет собран сборщиком мусора, как сказано @rerun.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...