我正在编写一个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元素。
有没有更好的方法来完成这个简单的任务而不诉诸像后台工作者这样过于复杂的方法?
答案 0 :(得分:0)
表单的Load
不是表单加载时触发的最后一个。
也许试试System.Windows.Forms.Form.Shown
查看winforms事件加载顺序:Winforms - order of Load and Activated events
这样您就不必处理依赖本地机器时间的问题。