IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Thread et WebBrowser : problème de cast


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut Thread et WebBrowser : problème de cast
    Bonjour,

    Généralement, je règle mes problèmes grâce aux différentes contributions que je trouve par mon ami Google mais là, je bloque et j'en peux plus !

    Dans un Form, j'ai un contrôle WebBrowser affichant des pages html. Des boutons contrôlent des Scripts Java interagissant avec les sites web. Un des boutons a pour but d'interroger certaines propriétés du webbrowser et la sub en question est exécutée via un thread.

    Voici un code très simplifié mais générant l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Imports System.Windows.Forms
    Imports System.Threading
     
    Public Class Bidon
        Inherits System.Windows.Forms.Form
     
        Private ThreadBcl As Thread
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Me.WebBrowser1.Navigate("http:\\bidon.com")
        End Sub
     
        Private Sub BoutonPropriete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Slip.Click
            ThreadBcl = New Thread(AddressOf CaptBT)
            ThreadBcl.Name = "ThreadMoveBt"
            ThreadBcl.Start()
        End Sub
     
        Sub CaptBT()
            MsgBox(Me.WebBrowser1.IsBusy)
        End Sub
    End Class
    A l'issue de l'événement click du bouton "BoutonPropriete", j'ai une erreur de cast : "Le cast spécifié n'est pas valide." Si j'interroge une propriété d'un autre contrôle, il n'y a aucun problème...

    Avez-vous déjà eu un cas similaire ? Des idées ???

    Merci d'avance, Magum


  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    sur quelle ligne ca plante ?
    (dans la plupart des cas ce message est sur un ctype ou un directcast)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    ça plante sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox(Me.WebBrowser1.IsBusy)

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    et ça ça marche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox(Me.WebBrowser1.IsBusy.ToString)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    non... J'ai également essayer des conversions de type avant de poster mais je n'ai rien trouvé...

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    et si tu appelles CaptBT sans passer par un thread ca marche ?
    que vaut Me.WebBrowser1.IsBusy.ToString ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    sans thread, ça fonctionne très bien.

    Mais je ne crois pas pouvoir m'en passer. J'ai simplifié le code pour une meilleur lisibilité et plus de clarté mais logiquement, je boucle sur l'état (isBusy) du webbrowser pour détecter quand le chargement d'un webservice est terminé et agir en fonction. Sans thread, je ne crois pas pouvoir lancer la boucle d'un côté et laisser le webbrowser "vivre sa vie" de l'autre.

  8. #8
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Essayes d'utiliser This.Invoke. Peut être que le webBrowser n'aime pas être chatouillé à partir d'un autre thread.
    Donc tu crées une méthode et tout et tout pour obtenir la propriété voulue du webBrowser. En détail je ne sais pas je hais le vb, demande à sperot

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    Smyley, ton conseil a été le bon...

    Voici donc le code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Imports System.Windows.Forms
    Imports System.Threading
     
    Public Class Bidon
        Inherits System.Windows.Forms.Form
     
        Private ThreadBcl As Thread
        Private Delegate Sub WebBowserInvokeHandler() 
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Me.WebBrowser1.Navigate("http:\\bidon.com")
        End Sub
     
        Private Sub BoutonPropriete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Slip.Click
            ThreadBcl = New Thread(AddressOf CaptDelegate)
            ThreadBcl.Name = "ThreadMoveBt"
            ThreadBcl.Start()
        End Sub
     
       Sub CaptDelegate()
            If WebBrowser1.InvokeRequired Then
                WebBrowser1.Invoke(New WebBowserInvokeHandler(AddressOf CaptBT))
            Else
                CaptBT()
            End If
       End sub
     
        Sub CaptBT()
            MsgBox(Me.WebBrowser1.IsBusy)
        End Sub
    End Class
    Merci à tous pour votre coup de main !!!

    A+

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    seul le thread principal peut modifier un controle, par contre en théorie on peut y lire des valeurs, enfin ca dépend de ce que fait la propriété, donc c'est plausible que le webbrowser.isbusy veut pas

    peut etre que msgbox n'aime pas trop non plus ne pas etre appelé par un autre thread
    pour ca essaye msgbox "bonjour" sur ton thread


    pour ramener des traitements d'un thread vers le principal il y a une technique utilisant des delegués

    à priori j'explique ca ici :
    http://www.developpez.net/forums/d49...s/#post2980721

    à adapter ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CASTS]problème de cast de Time
    Par DeVoN dans le forum Langage
    Réponses: 7
    Dernier message: 22/02/2006, 17h24
  2. [JDBC Driver][JSTL] Problème de cast de données
    Par GyLes dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/09/2005, 10h00
  3. problème de cast!
    Par LaseLiep dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2005, 09h30
  4. Problème de cast/serialization/externalization ?
    Par Linlin dans le forum CORBA
    Réponses: 1
    Dernier message: 06/12/2004, 16h46
  5. [C#] Problème de casting de @IDENTITY
    Par bilb0t dans le forum Accès aux données
    Réponses: 7
    Dernier message: 03/09/2004, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo