[vb 2005] Anti gel de prog

Résolu
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 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.

Clad

15 réponses

Utilisateur anonyme
12 juil. 2006 à 23:03
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

    
If
e.Result.GetType()
Is

GetType
(
String
)
Then

      
RaiseEvent
ConnexionEnd(
CType
(e.Result,
String
))

    
End

If

  
End

Sub

End

Class




Et pour son utilisation:



Private

WithEvents
TConect
As

New
Conect()

Private

Sub
DansUneSubOuAutre()

  TConect.Connexion(
"http://www.lesitequetuveux.com"
)

End

Sub

Private

Sub
TConectOnConnexionEnd(
ByVal
Page
As

String
)
Handles
TConect.ConnexionEnd

  System.Windows.Forms.MessageBox.Show(Page)

End

Sub



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
3
Utilisateur anonyme
9 juil. 2006 à 18:51
Salut,

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
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 mars 2010
9 juil. 2006 à 19:15
Et comment celà fonctionne ?

(je débute dans vb 2005)

Clad
0
Utilisateur anonyme
9 juil. 2006 à 19:45
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 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()

Clad
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 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 :

Private

retour
As
String

retour = connexion("http://....")

et je traité retour

Clad
0
Utilisateur anonyme
10 juil. 2006 à 12:23
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
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 mars 2010
10 juil. 2006 à 20:00
oki merci je vais faire des teste et je te retien au courant !
mici

Clad
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 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)

merci

Clad
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 mars 2010
13 juil. 2006 à 11:31
hihi mici jvé testé mais je ne comprend rien a ton code mdr

Clad
0
Utilisateur anonyme
13 juil. 2006 à 11:39
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
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 mars 2010
13 juil. 2006 à 11:43
Bon merci beaucoup ton system fonction nikel ! il me reste juste a comprendre ton code !

Clad
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 mars 2010
13 juil. 2006 à 11:43
Bon merci beaucoup ton system fonction nikel ! il me reste juste a comprendre ton code !

Clad
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 mars 2010
13 juil. 2006 à 12:03
re a koi sert :

Public
Sub
New()

End
Sub

Public
Sub
New(
ByVal URL
As
String)BgWorker.RunWorkerAsync(URL)

End
Subcar méme viré ca fonctionne !

Clad
0
Utilisateur anonyme
13 juil. 2006 à 12:23
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
0
Rejoignez-nous