0

我正在编写一个 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 元素。

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

4

1 回答 1

0

Load当表单加载时,表单并不是最后一个触发的。

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

查看 winforms 事件加载顺序:Winforms - 加载和激活事件的顺序

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

于 2013-10-17T17:56:42.930 回答