Может ли дескриптор окна в .NET изменить его значение? - PullRequest
8 голосов
/ 21 июля 2011

За время существования процесса .NET обрабатывает ли дескриптор System.Windows.Forms.Form, скажем, основная форма, используемая в Application.Run(form), фактически меняет свое значение, т. Е. Использует значение дескриптора в другом процессе, например, IntPtr handle = User32.FindWindow(null, "Name"), есть ли случай, когда этот дескриптор может быть недействительным во время выполнения .NET?

EDIT

Мне нужно знать дескрипторы, потому что я хочу использовать SendMessage и WM_COPYDATA и т.п. для IPC.

1 Ответ

9 голосов
/ 21 июля 2011

Дескриптор окна гарантированно будет действительным и не будет использоваться повторно до тех пор, пока окно живет.Это индекс, как в природе, действительный глобально и, в целом, ведет себя больше как глобальный идентификатор, чем как дескриптор ядра (которые действительны только в одном процессе и указатель как в природе).Как только окно закрывается, дескриптор окна может быть повторно использован и теперь указывает на другое окно.

Но что не очевидно, если время жизни Form и нижележащих окон window совпадают.Я смутно помню, что в VCL Delphi (который является духовным предшественником 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

Из описания этого метода я заключаю, что дескриптор окна действительно может меняться в течение времени жизни формы.

...