Erreur avec la commande show !!!
floflo55
Messages postés
271
Statut
Membre
-
floflo55 Messages postés 271 Statut Membre -
floflo55 Messages postés 271 Statut Membre -
Bonjours a tous, j'ai fait un code qui vérifie les mise a jour, le voici:
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
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
2 réponses
-
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.-
-
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). -
-
-
(Je me corrige de ma version "pas thead-safe donc pas bien").
A chaque fois que tu rencontres ce problème, il faut remplacerform3.show
parIf form3.InvokeRequired Then form3.BeginInvoke(New EventHandler(AddressOf form3.show)) Else form3.show End IfEt 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)-
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
-