Clad49
Messages postés265Date d'inscriptiondimanche 3 août 2003StatutMembreDernière intervention29 mars 2010
-
9 juil. 2006 à 18:32
Utilisateur anonyme -
13 juil. 2006 à 12:23
Bonjour !
J'utilise une fonction qui permet de récupérer des infos sur un site internet, le sousi c'est que le temps qu'il s'y connect et récupére les information mon programe et gelé !
J'aimeré afficher en attendant l'arrivé des information afficher une sorte de chargement mais celà et imposible étant donnée que le programe et gelé !
Si quelqu'un a une idée ???
Voici la fonction que j'utilise :
Public
Function
connexion(
ByVal
url
As
String
)
As
String
On
Error
GoTo
erreur
Dim
Web
As
New
WebClient
Dim
Str
As
New
StreamReader(Web.OpenRead(url))
connexion = Str.ReadToEnd
erreur:
If
Err.Number <> 0
Then
connexion =
"Pas de réponce"
End
Function
ps : j'ai testé avec Application.DoEvents() mais ca fonctionne pas.
Il devrai plutot te retourner une InvalidOperationException.
Le problème des threads et que tu ne peut pas accéder au controles contenue dans un autre. Il faut que tu passe par des delegate et tout. Vu que tu travaille avec vs2005, je te conseil d'utiliser les BackGroundWorker qui simplifie la tache.
Donc, on met tout en class vu que tu veux que se sois portable:
Public
Class
Conect
Private
WithEvents
BgWorker
As
New
System.ComponentModel.BackgroundWorker()
Public
Event
ConnexionEnd(
ByVal
Page
As
String
)
Public
Sub
New
()
End
Sub
Public
Sub
New
(
ByVal
URL
As
String
)
BgWorker.RunWorkerAsync(URL)
End
Sub
Public
Sub
Connexion(
ByVal
URL
As
String
)
BgWorker.RunWorkerAsync(URL)
End
Sub
Private
Sub
BgWorker_DoWork(
ByVal
sender
As
Object
,
ByVal
e
As
System.ComponentModel.DoWorkEventArgs)
Handles
BgWorker.DoWork
If
e.Argument.GetType()
Is
GetType
(
String
)
Then
Dim
URL
As
String
=
CType
(e.Argument,
String
)
Dim
Web
As
New
System.Net.WebClient()
Try
Dim
Str
As
New
System.IO.StreamReader(Web.OpenRead(URL))
e.Result = Str.ReadToEnd()
Catch
ex
As
Exception
e.Result =
"Pas de réponce"
Finally
Web.Dispose()
Web =
Nothing
End
Try
End
If
End
Sub
Private
Sub
BgWorker_RunWorkerCompleted(
ByVal
sender
As
Object
,
ByVal
e
As
System.ComponentModel.RunWorkerCompletedEventArgs)
Handles
BgWorker.RunWorkerCompleted
Il était une fois, un pauvre petit règlement que personne ne lisait. Il est tout sympa mais il est triste, aidez-le, lisez-le, ca lui ferait plaisir ainsi qu'a nous. Merci
Fait ca dans un autre Thread (System.Threading.Thread).
Kenji
Il était une fois, un pauvre petit règlement que personne ne lisait. Il est tout sympa mais il est triste, aidez-le, lisez-le, ca lui ferait plaisir ainsi qu'a nous. Merci
Oui, c'est vrai, j'ai été un peu vite.
J'ai refait un peu au propre:
Private
url
As
String
Private
Page
As
String
Public
Sub
Connexion()
Dim
Web
As
New
System.Net.WebClient()
Try
Dim
Str
As
New
System.IO.StreamReader(Web.OpenRead(url))
Page = Str.ReadToEnd()
Catch
ex
As
Exception
Page =
"Pas de réponce"
Finally
Web.Dispose()
Web =
Nothing
End
Try
End
Sub
Et pour l'utilisation:
Dim
ConnextionThread
As
New
System.Threading.Thread(
AddressOf
Connexion)
ConnextionThread.Start()
Kenji
Il était une fois, un pauvre petit règlement que personne ne lisait. Il est tout sympa mais il est triste, aidez-le, lisez-le, ca lui ferait plaisir ainsi qu'a nous. Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Clad49
Messages postés265Date d'inscriptiondimanche 3 août 2003StatutMembreDernière intervention29 mars 2010 10 juil. 2006 à 10:58
Salut !
j'ai de droit de faire ca ?
PublicFunction connexion(ByVal url AsString) As
String
Dim
Web AsNew System.Net.WebClient()
Try
Dim Str AsNew System.IO.StreamReader(Web.OpenRead(url))
connexion = Str.ReadToEnd()
Catch ex As Exception
connexion = "Pas de réponce"
Finally
Web.Dispose()
Web = Nothing
EndTry
EndFunction
et de l'appeler comme ceci :
Dim ConnextionThread AsNew System.Threading.Thread(AddressOf Connexion(http://MonAdresse)
ConnextionThread.Start()
Clad49
Messages postés265Date d'inscriptiondimanche 3 août 2003StatutMembreDernière intervention29 mars 2010 10 juil. 2006 à 11:03
car en faite c'est une fonction qui se trouve dans un module et que j'appel de plusieurs endroi différent !
cette fonction je la traité de la maniére suivante :
Non, ca ne marche pas.
Tu peut pas mettre de valeurs de retour pour un Thread sinon il sert a rien.
Je m'explique:
Le but de crée un nouveau thread et de laisser la main au thread principale qui est ton application. Donc de ne pas la geler.
Si tu veux attendre une valeur de retour a ton thread, il faudras que le thread principale attande que celui que tu crée se finisse, donc il sera geler. Alors crée un thread ne servira a rien. Ca reviendra à faire une function dans le thread principale.
Donc, ce que tu peux faire, c'est par exampe un événement qui se déclanche quand le thread est fini.
Kenji
Il était une fois, un pauvre petit règlement que personne ne lisait. Il est tout sympa mais il est triste, aidez-le, lisez-le, ca lui ferait plaisir ainsi qu'a nous. Merci
Clad49
Messages postés265Date d'inscriptiondimanche 3 août 2003StatutMembreDernière intervention29 mars 2010 12 juil. 2006 à 22:19
Salut !
bon le system fonctionne mais il me reste un sousi !!!
voici ce que j'utilise :
Public
Sub Connexion()
Dim Web
As
New WebClient()
Try
Dim Str
As
New StreamReader(Web.OpenRead(url))
Page = Str.ReadToEnd()
Catch ex
As Exception
Page =
"Pas de réponce"
Finally
Web.Dispose()
Web =
Nothing
End
Try
test(Page)
End
Sub
Public
Sub test(
ByVal retour
As
String) MsgBox(retour
)
frmLoggin.text.Text = retour
End
SubLe probléme et le suivant :
MsgBox(retour) me retourne ce qu'il y a sur le site par contre frmLoggin.text.Text = retour ne maffiche jamais ce qu'il y a sur le site dans le textbox ! Comment ca se fait ???
(et celà peut importe ce que retourne frmLoggin.text.Text, je pe métre frmLoggin.text.Text = "coucou" il ne m'affichera pas coucou dans la text box)
C'est juste un peu condenser, mais ce n’est pas excessivement dur à comprendre.
Bonne chance quand même.
Kenji
Il était une fois, un pauvre petit règlement que personne ne lisait. Il est tout sympa mais il est triste, aidez-le, lisez-le, ca lui ferait plaisir ainsi qu'a nous. Merci
J'avais mis ca si tu voulais t'en servire différamant :
Dim TConect AsNew Conect("http://www.lesitequetuveux.com")
C'est pour avoir deux constructeur différants.
Oui, tu peux le retirer, si tu t'en sert pas c'est inutile.
Kenji
Il était une fois, un pauvre petit règlement que personne ne lisait. Il est tout sympa mais il est triste, aidez-le, lisez-le, ca lui ferait plaisir ainsi qu'a nous. Merci