Message d'attente
Le
Stephane TUET
Bonjour
J'essaie depuis un bon moment maintenant et sans succés de réaliser un
message d'attente pendant un traitement (en fait, un appel à un Web Service
en mode synchrone). Le but est que le message apparaisse lorsque le temps
d'attente devient trop long Comme j'ai également une image Gif animée sur
cette form, je suppose qu'il faut que je crée un nouveau Thread pour que
l'animation marche correctement et pour gérer l'ouverture retardée.
J'ai bien commencé à écrire quelques lignes de code, mais ça ne fonctionne
par comme je veux (en général je n'ai rien du tout qui s'affiche :-) )
Dans un module j'ai les déclarations suivantes :
Private frm_wait As New frm_wait 'la fenêtre d'attente
Private WithEvents TimerWait As New Timer
Private Thread As New Threading.Thread(AddressOf DebutThreadAttente)
Dans ma fenêtre où il y a l'appel au service web j'ai qq chose du style :
DebutAttente()
try
'Appel du service web
catch
'gestion d'erreur
end try
FinAttente()
Et mes procédures sont les suivantes :
Public Sub DebutAttente()
TimerWait.Interval = K_TIMER_WAIT 'la variable définie en ms pour le
temps d'attente avant affichage de la fenêtre
TimerWait.Start()
End Sub
Private Sub TimerWait_Tick(ByVal sender As Object, ByVal e As
System.EventArgs) Handles TimerWait.Tick
TimerWait.Stop()
Thread.Start()
End Sub
Private Sub DebutThreadAttente()
frm_wait.Show()
End Sub
Public Sub FinAttente()
TimerWait.Stop()
frm_wait.Hide()
End Sub
Avec cela je voulais réaliser uniquement un Show/Hide de la fenêtre
d'attente avant/après chacun des traitements mais ça ne marche pas
J'avoue que je suis bien perdu avec ce thread. Si quelqu'un pouvait
m'indiquer une piste pour réaliser cela
Merci d'avance
Steph
J'essaie depuis un bon moment maintenant et sans succés de réaliser un
message d'attente pendant un traitement (en fait, un appel à un Web Service
en mode synchrone). Le but est que le message apparaisse lorsque le temps
d'attente devient trop long Comme j'ai également une image Gif animée sur
cette form, je suppose qu'il faut que je crée un nouveau Thread pour que
l'animation marche correctement et pour gérer l'ouverture retardée.
J'ai bien commencé à écrire quelques lignes de code, mais ça ne fonctionne
par comme je veux (en général je n'ai rien du tout qui s'affiche :-) )
Dans un module j'ai les déclarations suivantes :
Private frm_wait As New frm_wait 'la fenêtre d'attente
Private WithEvents TimerWait As New Timer
Private Thread As New Threading.Thread(AddressOf DebutThreadAttente)
Dans ma fenêtre où il y a l'appel au service web j'ai qq chose du style :
DebutAttente()
try
'Appel du service web
catch
'gestion d'erreur
end try
FinAttente()
Et mes procédures sont les suivantes :
Public Sub DebutAttente()
TimerWait.Interval = K_TIMER_WAIT 'la variable définie en ms pour le
temps d'attente avant affichage de la fenêtre
TimerWait.Start()
End Sub
Private Sub TimerWait_Tick(ByVal sender As Object, ByVal e As
System.EventArgs) Handles TimerWait.Tick
TimerWait.Stop()
Thread.Start()
End Sub
Private Sub DebutThreadAttente()
frm_wait.Show()
End Sub
Public Sub FinAttente()
TimerWait.Stop()
frm_wait.Hide()
End Sub
Avec cela je voulais réaliser uniquement un Show/Hide de la fenêtre
d'attente avant/après chacun des traitements mais ça ne marche pas
J'avoue que je suis bien perdu avec ce thread. Si quelqu'un pouvait
m'indiquer une piste pour réaliser cela
Merci d'avance
Steph

Poser une question


Tu execute DebutAttente qui lance un timer...
Tu lances Ton service web qui traite sa tache ....
Quand il a finit sa tache tu execute FinAttente.
Tu as définit une intervalle pour le timer ( c'est un exemple ) 10ms
Donc au bout de 10ms le timer va s'arreter et lancer un autre Thread (
indépendant du service Web )
Ce Thread affiche la fenetre et s'arretes ( je suppose que frm_wait est
globale )
Ma question est :
Le lancement du service web se fait - il via un autre thread ? ou bloque t-
il le thread principal ?
si il se fait via un thread à part, il est normal que la fenetre se referme.
"Stephane TUET" OgJHmX$
j'en suis content, au moins même si mon code ne marche pas, il a été compris
:-) ). frm_wait est bien défini en global puisqu'il peut être appelé à
divers endroit dans mon application (je compte le faire à chaque appel d'un
service web).
L'appel du service web lui est réalisé dans le thread principal qui se
trouve donc bloqué.
J'ai également essayé de déplacé le lancement du timer comme ceci :
Public Sub DebutAttente()
Thread.Start()
End Sub
Private Sub DebutThreadAttente()
TimerWait.Interval = K_TIMER_WAIT
TimerWait.Start()
End Sub
Private Sub TimerWait_Tick(ByVal sender As Object, ByVal e As
System.EventArgs) Handles TimerWait.Tick
TimerWait.Stop()
frm_wait.Show()
End Sub
Public Sub FinAttente()
TimerWait.Stop()
frm_wait.Hide()
End Sub
Mais j'ai l'impression de ne pouvoir lancer le thread qu'une seule fois, au
deuxième appel à DebutAttente, j'ai un plantage...
Merci de ton aide.
Steph
"AlexC" dans le message de news: uupRlv$
pouvoir répondre :)
J'ai refait le code et j'avoue que là ... no sé :)
la fenetre s'ouvre mais se referme aussitot ...
cela aurait ete logique si le code repassait par la methode Hide mais ce
n'est pas le cas
ou encore si la frm_wait avait été déclarée en locale et qu'à la sortie du
thread elle avait été détruite ..
je continue à regarder ..
"Stephane TUET" Oj%23M22$
Il suffit d'enlever le Thread "DebutThreadAttente"
et de remplacer dans le gestionnaire d'évènemement du timer le Thread.start
par
frm_wait.show et ca marche ...
"Stephane TUET" Oj%23M22$
revient à retarder l'appel de mon service web le temps du Timer, ou alors
y'a quelque chose que je ne comprends pas bien...
"AlexC" dans le message de news: %