Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run function every second Visual C#

Tags:

c#

timer

draw

I have problems with timer. I have function in function (draw in func)

void func(){

 /*...do something ... */
for(){
   for() {
  /*loop*/

 draw(A,B, Pen);

 }

/*... do something ...*/
  }
}

This is draw function

   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();
      }

I call function 'func' on button click

private void button4_Click(object sender, EventArgs e){

    func();

}

I want to call draw function evry second (draw the line every second). Between drawings, function needs to continue working and calculate = loop, and draw next line for some time(interval). I tried with

timer1.Tick += new EventHandler(timer1_Tick);

etc..

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

etc..

but all that stops my function, and draw one random line. I just want the time(interval) between two drawings in function 'func'. Without timer works fine, but draw all lines immediately, I need slow drawing. Cheers.

like image 982
Јеца Алекса Avatar asked Dec 01 '22 22:12

Јеца Алекса


2 Answers

I'm not entirely clear on what you're trying to do, but, in general, you can use an object of the Timer class to specify code to be executed on a specified interval. The code would look something like this:

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
}
like image 62
JeffFerguson Avatar answered Dec 04 '22 11:12

JeffFerguson


try this

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);
}
like image 24
Behnam Esmaili Avatar answered Dec 04 '22 10:12

Behnam Esmaili