Запускайте функцию каждую секунду Visual C#

#c# #console-application

#c# #таймер #рисовать

Вопрос:

У меня проблемы с таймером. У меня есть функция в функции (рисовать в функции)

 void func(){   /*...do something ... */ for(){  for() {  /*loop*/   draw(A,B, Pen);   }  /*... do something ...*/  } }  

Это функция рисования

 public void draw1(Point Poc, Point Kra, Pen o) {  Graphics g = this.CreateGraphics();  g.DrawLine(o,Poc.X 4, Poc.Y 4,Kra.X 4, Kra.Y 4);  g.Dispose();  }  

Я вызываю функцию «функция» при нажатии кнопки

 private void button4_Click(object sender, EventArgs e){   func();  }  

Я хочу вызывать функцию рисования каждую секунду (рисовать линию каждую секунду). Между чертежами функции необходимо продолжить работу и вычислить = цикл, а затем нарисовать следующую строку в течение некоторого времени(интервала). Я пытался с

 timer1.Tick  = new EventHandler(timer1_Tick);  

и т.д..

 private void timer1_Tick(object sender, EventArgs e)  {  ...  draw(A, B, Pen)  }  

и т.д..

но все это останавливает мою функцию и рисует одну случайную линию. Мне просто нужно время(интервал) между двумя рисунками в функции «функция». Без таймера работает нормально, но рисуйте все линии сразу, мне нужно медленное рисование. Ваше здоровье.

Комментарии:

1. ваш метод тика таймера должен иметь draw(A,B, Pen); вместо draw1()

2. Таймер включен? Также добавьте параметры в функцию Draw1()

3. Параметры в порядке. Таймер включен.

Ответ №1:

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

 Timer myTimer = new Timer(); myTimer.Elapsed  = new ElapsedEventHandler(DisplayTimeEvent); myTimer.Interval = 1000; // 1000 ms is one second myTimer.Start();  public static void DisplayTimeEvent(object source, ElapsedEventArgs e) {  // code here will run every second }  

Ответ №2:

попробуйте это

 var aTimer = new System.Timers.Timer(1000);  aTimer.Elapsed  = new ElapsedEventHandler(OnTimedEvent);  aTimer.Interval = 1000; aTimer.Enabled = true;   //if your code is not registers timer globally then uncomment following code  //GC.KeepAlive(aTimer);    private void OnTimedEvent(object source, ElapsedEventArgs e) {  draw(A, B, Pen); }  

Ответ №3:

Вы не рисуете в приложении WinForms, вы отвечаете на сообщения об обновлении или рисовании. Сделайте то, что вы хотите сделать в Paint событии формы (или переопределите OnPaint метод). Если вы хотите, чтобы форма была нарисована заново, используйте Form.Invalidate . например, вызовите Form.Invalidate отметку таймера…

Ответ №4:

РЕШЕНО на данный момент с

 System.Threading.Thread.Sleep(700);