如何对代码进行编程,以便在屏幕上显示表单后 N 秒内执行操作

本文关键字:表单 显示 操作 执行 屏幕 代码 编程 | 更新日期: 2023-09-27 18:36:01

我正在编写一个GUI应用程序来显示/绘制一系列图形。 当应用程序启动时,它会自动从指定位置读取原始数据,并自动绘制和显示它们。 我添加了在屏幕上显示图表后自动将图表保存到文件的功能。

我保存的方法是将屏幕上的像素抓取到位图中并保存位图:

Bitmap memoryImage = new Bitmap(picCube.Size.Width, picCube.Size.Height);
Graphics g = Graphics.FromImage(memoryImage);
Point plotLoc = picBox.PointToScreen(Point.Empty);
g.CopyFromScreen(plotLoc.X, plotLoc.Y, 0, 0, picBox.Size);
memoryImage.Save(savePath, ImageFormat.Jpeg);

限制是此方法仅在图形已显示在屏幕上后才有效。 我有一个菜单项要保存,它可以正常工作,因为该应用程序已经显示在屏幕上以进入菜单。 现在我正在添加自动保存功能,我需要仅在表单完全显示在屏幕上后才能触发此保存操作。

我目前正在表单的 Load 事件中放入一个计时器,该计时器在 N 秒内关闭,这会触发保存操作。 但由于某种原因它不起作用,可能是因为计时器与 GUI 线程位于不同的线程中,这意味着计时器线程无法访问 GUI 元素。

有没有更好的方法来完成这个简单的任务,而无需诉诸像后台工作者那样过于复杂的方法?

如何对代码进行编程,以便在屏幕上显示表单后 N 秒内执行操作

表单

Load即使在表单加载时也不是最后一个触发的。

也许试试System.Windows.Forms.Form.Shown

查看 winForms 事件加载顺序: WinForms - 加载和激活事件的顺序

这样,您就不必处理依赖于本地计算机计时的问题。