Erreur avec la commande show !!!

Fermé
floflo55 Messages postés 221 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 21 août 2014 - 5 avril 2013 à 18:55
floflo55 Messages postés 221 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 21 août 2014 - 6 avril 2013 à 11:59
Bonjours a tous, j'ai fait un code qui vérifie les mise a jour, le voici:

Private Sub Form1_load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim response As HttpWebResponse = Nothing
        Dim sr As StreamReader = Nothing

        Try
            Dim request As HttpWebRequest = CType(WebRequest.Create("https://www.123.fr/acces.html"), HttpWebRequest)
            response = CType(request.GetResponse, HttpWebResponse)
            sr = New StreamReader(response.GetResponseStream)
            If sr.ReadToEnd <> Me.ProductVersion Then
                
                form3.show

            Else
                
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
        Finally
            If Not (response Is Nothing) Then
                response.Close()
            End If
            If Not (sr Is Nothing) Then
                sr.Close()
            End If
        End Try
    End Sub


Tous marche bien mais au moment ou il arrive a la commande " form3.show "
Il me dit qu'il y a eu une erreur et refuse de l'afficher et me dit ca :

Opération inter-threads non valide : le contrôle 'Form1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

Merci de m'aider ca fait un mois que je cherche !!!

Un IMMENSE merci d'avance ;)

PS: j'utilise visual basic 2010 express
A voir également:

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 5/04/2013 à 19:46
Le .NET, surtout le VisualBasic.net et ses Form en "Shared", "static" en C#, est assez casse-noix avec les threads.
Comme le threading est un peu dur à manipuler pour un débutant, ajoute la propriété
CheckForIllegalCrossThreadCalls = False
à form3.
Il ne devrait plus se plaindre (en revanche il ne faut jamais faire ça dans un environnement de production, il faut absolument rendre les opérations thread-safe).
Le Visual Basic c'est bien, mais qu'au début. C++ wins everything.
1
floflo55 Messages postés 221 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 21 août 2014 4
5 avril 2013 à 20:22
Merci beaucoup mais je met ou cette commande ??? Je suis novice !!!

Merci d'avance
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
5 avril 2013 à 20:28
Mon experience de VB.NET remonte à trop longtemps, mais je crois me souvenir que c'est paramétrable dans l'éditeur de propriétés quand tu créé l'interface graphique de ta form.
Autrement il est possible de le mettre à la main dans le fichier form3.Designer.vb (accessible via l'explorateur de fichiers de VisualStudio/VisualBasicExpress si je me souviens bien).
0
floflo55 Messages postés 221 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 21 août 2014 4
5 avril 2013 à 20:52
Merci bien mais il n'y a pas une autres technique car il y a aussi une autres commande qui est Panel2.show qui ne marche pas mais si je ne me trompe pas il n'y a pas de fichier pour tout les objet alors comment faire ???
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
5 avril 2013 à 21:01
(Je me corrige de ma version "pas thead-safe donc pas bien").
A chaque fois que tu rencontres ce problème, il faut remplacer
form3.show
par
If form3.InvokeRequired Then
    form3.BeginInvoke(New EventHandler(AddressOf form3.show))
Else
    form3.show
End If
Et bien-sur adapter form3 et form3.show selon l'objet et la fonction voulue.
(Je fais plus de VB.NET donc je ne peux pas savoir si ça marchera a 100% et du premier coup)
1
floflo55 Messages postés 221 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 21 août 2014 4
6 avril 2013 à 11:59
Super sa marche !!! Mille fois merci :)

Mais maintenant j'ai un nouveau code qui ne marche pas, tu as une solution ???

Dim TargetImg As New System.Drawing.Bitmap(WebBrowser1.Size.Width, WebBrowser1.Size.Height)
        WebBrowser1.DrawToBitmap(TargetImg, New System.Drawing.Rectangle(0, 0, MyBase.Size.Width, MyBase.Size.Height))


C'est pour prendre une photo

Il me dit:

Opération inter-threads non valide : le contrôle 'WebBrowser1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

Merci d'avance :)

Désoler pour toutes ces questions
0