c# - 有没有办法在循环中更新 Windows 窗体?
问题描述
我的目标是做一个桌面宠物。我已经编写了很多在while循环中执行并更新每次迭代的逻辑。为了显示我正在寻找的生物,我使用 Windows 窗体,但这带来了一个两难境地。
我希望能够执行逻辑,然后在同一个循环中更新窗口(处理事件和重绘),而无需处理Application.Run()
或多线程。作为一个例子,作为一个来自 python 的人,使用 tkinter 可以update()
在循环中调用窗口上的方法,这与调用一次基本相同mainloop()
,只是它不会阻塞程序。
表单是否提供任何类似的功能?
解决方案
正如 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
}
}
推荐阅读
- flutter - firebase_messaging onBackgroundMessage local_notifications
- graphql - 如何为分页的第一页初始化 nextToken?
- apache-kafka - 将 UDF 方法作为参数传递给 KSQL 中的其他 UDF
- python - Python:FTPLIB 下载具有原始修改时间的文件
- javascript - 如何在 vuejs 中按下按钮时删除空间?
- javascript - 我可以在列表框上使用什么事件
- javascript - DOM 函数给出了意想不到的结果
- node.js - POST 请求上的 Nodejs Express API 错误 400
- c# - 当用户输入整数时,MessageBox.Show 不会出现
- bash - 在远程执行的 bash 文件中加载本地 config.env