在 .NET 进程的生命周期中,System.Windows.Forms.Form
,假设使用的主要形式Application.Run(form)
实际上改变它的值,即如果在不同的进程中使用句柄的值,例如IntPtr handle = User32.FindWindow(null, "Name")
,是否存在该句柄可能被 .NET 运行时无效的情况?
EDIT
我需要知道句柄,因为我想使用SendMessage
and WM_COPYDATA
IPC 等。
窗口句柄保证有效,并且在窗口存在期间不会被重用。它的索引就像本质上一样,全局有效,通常表现得更像是一个全局 ID,而不是像一个内核句柄(它只在一个进程中有效,就像本质上的指针一样)。一旦窗口关闭,窗口句柄可能会被重用,现在指向另一个窗口。
但不明显的是,如果Form
和底层的窗口window
是相同的。我依稀记得在Delphi的VCL(Windows.Forms的精神前身)中,某些属性的更改在后台重新创建了窗口。
的存在控制.重新创建句柄属性似乎有力地表明底层窗口的生命周期确实可能比 .net 控件的生命周期短。这可能会导致手柄Form
在其生命周期内发生变化。
控制.重新创建句柄
每当新控件需要参数时,就会调用 RecreateHandle 方法,但使用从 UpdateStyles 到 CreateParams 的调用是不够的。此方法还调用 DestroyHandle 和 CreateHandle 并将 RecreatingHandle 设置为 true。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.recreatehandle.aspx
从该方法的描述中我得出结论,窗口句柄确实可以在窗体的生命周期内更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)