GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 19 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
AlexC
Le #12534651
d'après le code que tu donne :

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$
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



Stephane TUET
Le #12534611
Merci pour ta réponse et tu as bien compris ce que j'ai essayé de faire (et
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$
d'après le code que tu donne :

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$
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







AlexC
Le #12534581
Le code etait pas compiqué mais j'aime bien etre sur du contexte pour
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$
Merci pour ta réponse et tu as bien compris ce que j'ai essayé de faire
(et 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$
d'après le code que tu donne :

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$
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











AlexC
Le #12534561
J'ai trouvé, mais je ne comprends pas pourquoi ...

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$
Merci pour ta réponse et tu as bien compris ce que j'ai essayé de faire
(et 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$
d'après le code que tu donne :

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$
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











Stephane TUET
Le #12534541
Euh oui mais si je fais ça, je n'ai plus de Thread et donc finalement ça
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: %
J'ai trouvé, mais je ne comprends pas pourquoi ...

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$
Merci pour ta réponse et tu as bien compris ce que j'ai essayé de faire
(et 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$
d'après le code que tu donne :

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$
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















Publicité
Suivre les réponses
Poster une réponse
Anonyme