【问题标题】:Detecting when a windows form has been initialised and has completely painted检测窗口窗体何时已初始化并已完全绘制
【发布时间】:2015-01-27 00:39:18
【问题描述】:

我正在寻找一种快速而肮脏的方法来测量一组 winform 的 UI 性能。我的想法是将 System.Diagnostic 计时调用放入代码库中,并检测从请求页面到完全绘制并可供用户使用的时间。这甚至可能吗?是否有一个我可以挂钩的初始事件和一个我可以在表单完全完成时挂钩的事件?绘。我知道有一个 Paint 事件,但这是表单开始绘制的时候,但这对我没有帮助。

我是一名处理一些 Windows 窗体的 Web 开发人员,因此问题很明显。

【问题讨论】:

  • 您想测量完全加载并呈现给用户需要多长时间?
  • 就是这样,谢谢。我的后备选项是编写大量编码的 ui 测试来获得测量结果。及时这样做会很好,但现在我想要最快的方法来实现这一目标

标签: c# winforms performance events system.diagnostics


【解决方案1】:

您可以在执行 Form 的构造函数之前或在构造函数的第一行中启动 Stopwatch

最好在构造函数之前启动Stopwatch,因为当你在构造函数中启动它时,基类构造函数已经完成运行,所以如果你决定启动它,你将排除这些时间在构造函数的第一行。

然后在Form.Shown 事件中停止Stopwatch。当表单完全显示给用户时,它将被引发。

然后使用Stopwatch.Elapsed 读取表单加载所用的时间。

正如@HansPassant 在 cmets 中指出的那样,您可能需要在 Shown 事件处理程序中添加 this.Update();,以便我们可以确保所有孩子都被完全绘制。

【讨论】:

  • 几乎正确。您必须在 Shown 事件处理程序中调用 Update() 以确保子窗口也被完全绘制。他们是通常的落后者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
相关资源
最近更新 更多