.NET中的窗口句柄可以改变它的值吗?

在.NET进程的生命周期中,执行System.Windows.Forms.Form句柄,可以说Application.Run(form)使用的主表单实际上改变了它的值,也就是说,如果使用不同的进程,例如IntPtr handle = User32.FindWindow(null, "Name") ,是否有一种情况下,该处理可能会失效.NET运行时?

编辑

我需要知道句柄,因为我想为IPC使用SendMessageWM_COPYDATA等。

Solutions Collecting From Web of ".NET中的窗口句柄可以改变它的值吗?"

窗口句柄保证是有效的,只要窗口存在就不会被重用。 它像自然界中的索引一样,在全局上是有效的,一般而言,它的行为更像是一个全局ID,而不像内核句柄(它只在一个进程和指针中有效)。 一旦窗口关闭,窗口句柄可能被重用,现在指向另一个窗口。

但不明显的是,如果Form的生命周期和底层窗口的生命周期是相同的。 我隐约记得,在Delphi的VCL(这是Windows.Forms的精神前身)中,某些属性更改在后台重新创建了窗口。

Control.RecreatingHandle属性的存在似乎是一个强有力的指示,实际上底层窗口的生命周期可能比.net控件的生命周期短。 这可能会导致在其生命周期中更改Form的句柄。

Control.RecreateHandle
无论何时需要新控件的参数,都会调用RecreateHandle方法,但使用从UpdateStyles到CreateParams的调用是不够的。 此方法也调用DestroyHandle和CreateHandle并将RecreatingHandle设置为true。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.recreatehandle.aspx

从这个方法的描述我得出结论,窗口句柄确实可以在表单的生命周期中改变。