OVH Cloud OVH Cloud

Qu'est-ce que "Window Handle"?

1 réponse
Avatar
Tamia
J'essaye d'appeller une méthode dans une classe Form1 dont une instance est
startupScreen depuis un autre thread. J'ai donc écrit le code ci-dessous:

Private Delegate Sub dSetUI(ByVal Param1 As Integer)

Public Sub SetUI(ByVal typeUI As Integer)
Dim tSetUI As New dSetUI(AddressOf startupScreen.UISetUI)
Dim param() As Object = {typeUI}
startupScreen.BeginInvoke(tSetUI, param)
End Sub

Sur la ligne "startupScreen.BeginInvoke(tSetUI, param)" j'obtient l'erreur:

Invoke or BeginInvoke cannot be called on a control until the window handle
has been created.

Pourtant la startup screen est déjà affichée depuis longtemps car j'ai déjà
utilisé un des boutons avant dans l'éxécution du programme.

Que faire?
Qu'est-ce qu'un "Window Handle"?

Merci pour votre réponse.

1 réponse

Avatar
Mehdi
On Thu, 30 Mar 2006 14:22:01 -0800, Tamia wrote:

Sur la ligne "startupScreen.BeginInvoke(tSetUI, param)" j'obtient l'erreur:

Invoke or BeginInvoke cannot be called on a control until the window handle
has been created.

Pourtant la startup screen est déjà affichée depuis longtemps car j'ai déjà
utilisé un des boutons avant dans l'éxécution du programme.

Que faire?
Qu'est-ce qu'un "Window Handle"?



Un Window Handle est l'identifiant unique d'un Control. C'est utilisé par
l'API Win32 pour lui permettre de savoir de quel Control il est question
(puisque l'API Win32 n'est pas OOP et n'a pas de notions d'objects). Le
window handle d'un control est automatiquement créé lorsqu'un control est
affiché a l'écran puis détruit lorsque tu appele sa méthode Dispose() ou
lorsque le GC le "ramasse".

L'erreur signifie que soit startupScreen n'a pas encore été affiché, soit
que startupScreen a déja été détruit. Vu que tu nous dit que startupScreen
a déja été affichée lors de l'appel, je pencherai pour la 2eme solution.