Таймеры в C #, как управлять тем, что отправляется на timer1_tick - PullRequest
5 голосов
/ 23 января 2011

В этой следующей функции, которая выполняется всякий раз, когда я делаю

timer1.Enabled  = true

private void timer1_Tick(object sender, EventArgs e)
{
//code here
}

Как я могу контролировать то, что отправляется на (object sender, EventArgs e)?

Я хочу использовать его параметры

Ответы [ 4 ]

6 голосов
/ 23 января 2011

Подпись метода фиксирована, поэтому вы не можете передавать ей дополнительные параметры.Однако ссылка this действительна в обработчике событий, поэтому вы можете получить доступ к членам экземпляра класса (переменные, объявленные внутри class, но вне любого метода).

3 голосов
/ 23 января 2011

1) Вы можете использовать свойство Tag своего таймера как userState

void timer1_Tick(object sender, EventArgs e)
{
    Timer timer = (Timer)sender;
    MyState state = timer.Tag  as MyState;
    int x = state.Value;
}

2) Вы можете использовать поле ссылочного типа, чтобы прочитать его в теме таймера

void timer1_Tick(object sender, EventArgs e)
{
    int x = _myState.Value;
} 

3)Вы можете использовать System.Threading.Timer для передачи состояния в обработчик событий таймера

Timer timer = new Timer(Callback, state, 0, 1000);
0 голосов
/ 23 января 2011

Может быть, вы могли бы сделать наследование от класса timer, и там преобразовать событие tick (из Timer) в событие tick_user или что-то вроде этого, которое модифицирует de params и помещает в EventArgs (это правильное местов отправителя) другие параметры, которые вы хотите.Также вы можете создать метод с большим или меньшим количеством параметров, это ваше дело.

Надеюсь, это поможет.

0 голосов
/ 23 января 2011

Если вы хотите получить доступ к свойству Timer в методе timer1_tick, вы можете сделать это через

this.timer1 ex: this.timer1.Enabled =false;

или

Timer timer = (Timer) sender;
timer.Enabled = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...