有没有一种方法可以循环更新Windows窗体?

时间:2020-08-01 22:59:44

标签: c# winforms

我的目标是制造台式宠物。我已经编写了很多逻辑,这些逻辑可以在while循环中执行并更新每次迭代。为了显示我要使用Windows窗体的生物,但这带来了一个难题。

我希望能够执行逻辑,然后在同一循环中更新窗口(处理事件和重绘),而不必处理Application.Run()或多线程。例如,作为一个来自python的人,使用tkinter可以在循环中的窗口上调用update()方法,这与一次调用mainloop()相同,除了它不会。 t阻止程序。

表格是否提供任何类似的功能?

1 个答案:

答案 0 :(得分:1)

正如斯科特·张伯伦(Scott Chamberlain)所述,您应该使用计时器来运行“循环”。 Winforms是基于事件的,因此添加无限循环将冻结程序,因为事件被阻止了。

此代码说明了如何使用计时器。我在窗体中添加了一个图片框,它随着计时器触发而在屏幕上移动。

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
    }
}