Kan et vindue håndtere. NET ændre det er værdi?

Indlæg af Hanne Mølgaard Plasc

Problem



I løbet af en .NET-process levetid gør håndtaget til en System.Windows.Forms.Form, lad os sige, at hovedformularen, der anvendes i Application.Run(form), faktisk ændrer dens værdi, dvs. hvis man bruger værdien af ​​håndtaget i en anden proces, fx IntPtr handle = User32.FindWindow(null, "Name"), er der et tilfælde, hvor håndtaget kan blive ugyldiggjort af .NET runtime?


EDIT


Jeg skal kende håndtagene, fordi jeg vil bruge SendMessage og WM\_COPYDATA og lignende til IPC.

Bedste reference


Et vindueshåndtag er garanteret at være gyldigt og ikke genbruges så længe vinduet lever. Det er indekset som i naturen, gyldigt globalt og generelt opfører sig mere som et globalt ID end et kernehåndtag (som kun er gyldigt i en proces og markør som i naturen). Når vinduet er lukket, kan vindueshåndtaget blive genbrugt og peger nu på et andet vindue.


Men hvad der ikke er indlysende er, at Form og de underliggende Windows window levetid er ens. Jeg husker i vagt, at i Delphi's VCL (som er den forgængelige forgænger for Windows.Forms) visse ejendomsændringer genskabte vinduet i baggrunden.


Eksistensen af ​​Control.RecreatingHandle-ejendommen virker som en stærk indikation på, at det underliggende vindues levetid kan være kortere end levetiden for .net-kontrollen. Det kan føre til at håndtaget af en Form ændres i løbet af dets levetid. [9]



   Control.RecreateHandle

  RecreateHandle-metoden hedder, når parametre er nødvendige for en ny kontrol, men det er utilstrækkeligt at bruge et opkald fra UpdateStyles til CreateParams. Denne metode kalder også DestroyHandle og CreateHandle og sætter RecreatingHandle til true.

  http://msdn.microsoft.com/en-us/library/system.windows.forms.control.recreatehandle.aspx[10]



Fra beskrivelsen af ​​denne metode konkluderer jeg, at vindueshåndtaget faktisk kan ændre sig i formens levetid.