redfoxofdeath
redfoxofdeath

Reputation: 61

Is there a way to update a windows form in a loop?

My goal is to make a desktop pet. I've already programmed a lot of logic that executes in a while loop and updates every iteration. To display the creature I'm looking to use windows forms, but that has brought up a dilemma.

I want to be able to execute the logic, and then update the window in the same loop (process events and redraw), without having to deal with Application.Run() or multi threading. As an example, and as someone who's come from python, using tkinter it's possible to call the update() method on a window in a loop, which is essentially the same as calling mainloop() once, except it doesn't block the program.

Do forms offer any similar functionality?

Upvotes: 0

Views: 4029

Answers (1)

Mike67
Mike67

Reputation: 11342

As Scott Chamberlain mentioned, you should use a timer to run your 'loop'. Winforms is event based so adding an infinite loop will freeze the program since events are blocked.

This code illustrates how to use a timer. I added a picture box to the form and it moves across the screen as the timer fires.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Timer tmr = new Timer();
        tmr.Interval = 50;   // milliseconds
        tmr.Tick += Tmr_Tick;  // set handler
        tmr.Start();
    }

    private void Tmr_Tick(object sender, EventArgs e)  //run this logic each timer tick
    {
        pictureBox1.Left += 1;  // move image across screen, picture box is control so no repaint needed
    }
}

Upvotes: 4

Related Questions