延迟创建Windows句柄

时间:2011-11-29 16:31:57

标签: .net winforms

article表明.NET延迟了windows句柄的创建,但我找不到任何MSDN引用等来支持这一点。任何人都可以向我指出更多信息吗?

  

为了提高性能,.NET推迟了真实的创造   尽可能使用Win32窗口

2 个答案:

答案 0 :(得分:1)

Control.Handle的文档中:

  

Handle属性的值是Windows HWND。如果尚未创建句柄,则引用此属性将强制创建句柄。

这并没有明确表示句柄创建是延迟的,但它是非常强烈暗示的。

答案 1 :(得分:1)

是的,在绝对必要之前,不会创建本机窗口。当您将Form的Visible属性设置为true或调用其Show方法(同样的事情)时,通常会发生这种情况。或者,如果在构造函数中使用需要Handle属性有效的属性。这是罕见的,可能有点麻烦。 Winforms类都存储您指定的属性值(或设计器生成的代码分配),并且在创建本机窗口之前不会实际应用它们。

优化通常很轻微,但它可以对某些控件产生很大的影响。如果你在构造函数中给它们很多项,那么很好的例子是TreeView和ListView。延迟初始化将使用批量初始化消息获取基础本机Windows控件。而不是您添加的每个单独项目的消息。很大的区别。另请注意,在表单的Load事件处理程序中添加项目的常见做法会使此优化失败。总是喜欢构造函数。