2014-01-17 5 views
-1

У меня есть три элемента управления метками и с помощью For Loop я написал метод, который перемещает элементы управления с верхней части формы на нижнюю. У меня три таймера, каждый из них перемещает один элемент управления несколько раз, но проблема в том, что они выполняются один за другим.C#: Выполнение нескольких таймеров одновременно

Я хочу, чтобы время выполнялось одновременно, т. Е. Все три метки одновременно перемещаются из верхней части формы вправо.

ПРИМЕЧАНИЕ. После каждого вызова таймера я создал случайный объект, который случайным образом сбрасывает позицию в верхней части формы.

+3

Какой таймер вы используете? Есть несколько, с другой семантикой. –

ответ

6

Тогда не используйте три таймера. Просто используйте один таймер и поместите свой код внутри своего Tick.

Согласно коду вы можете сделать следующее, определите Random переменные за пределы вашего метода, и просто использовать timer1_Tick события, вы можете удалить другие таймеры:

Random random = new Random(); 
private void timer1_Tick(object sender, EventArgs e) 
{ 
     int X = random.Next(0, 1230); 
     int y = X; 
     label2.Location = new Point(X, 5); 
     label3.Location = new Point(X, 5); 
     for (int i = 5; i <= 470; i++) 
     { 
      label2.Location = new Point(y, i); 
      label3.Location = new Point(y, i); 
      Thread.Sleep(1); 
     } 
} 
+0

Вот код для одного ярлыка. Когда я нажимаю кнопку в форме, ярлык начинает двигаться непрерывно. Как я могу запустить их одновременно, и если я не буду использовать таймер, то что еще? Темы и т. Д.? – user3206911

+0

private void Form1_KeyPress (отправитель объекта, KeyPressEventArgs e) { label1.Text = "Key Pressed:" + e.KeyChar; // ожидание (отправитель, e); timer1.Start(); timer2.Start(); } – user3206911

+0

частная пустота Timer1_Tick (объект отправителя, EventArgs е) { Случайные случайных = новый Random(); int X = random.Next (0, 1230); int y = X; label2.Location = new Point (X, 5); для (int i = 5; i <= 470; i ++) { timer2.Start(); label2.Location = new Point (y, i); Thread.Sleep (1); } } – user3206911

0

Используйте один таймер, и если вы хотите если у вас есть галочка, выполните различные обратные вызовы. Таким образом, во время выполнения вы можете определить, что должно быть в тике.

+0

Хорошо, спасибо, как мне перехватить это событие с ключевым событием, например, если во время анимации я нажимаю любую клавишу, останавливает анимацию или выполняет какое-либо действие? – user3206911

Смежные вопросы