Windows ne répond pas ...

cliquetde8
Messages postés
52
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
29 avril 2015
- Modifié par cliquetde8 le 31/12/2013 à 21:26
NHenry
Messages postés
14967
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2022
- 25 janv. 2014 à 23:08
Bonjour,

J'utilise une fonction me permettant de récupérer l'état d'un serveur depuis un site web, seulement , lorsque cette fonction est déclenché par un bouton ou le formload , tout va bien mais dans un timer , la fonction fait planter l'application, et windows recherche une solution au problème , la fonction n'est pas répété plusieurs fois dans le timer , mais plante tout de meme voici la fonction :

Remarque : L'application plante quand me lorsque la fonction n'est pas utilisé.

Function EUW()
        Dim EUWs As WebBrowser = New WebBrowser()
        EUWs.Navigate("http://www.islolup.com/")
        While Not EUWs.ReadyState = WebBrowserReadyState.Complete
            On Error Resume Next
            On Error GoTo 0
            Application.DoEvents()
        End While
        Dim stat As String = EUWs.Document.GetElementById("detail1").InnerHtml
        Label1.Text = (stat)
        textbox1.text = Label1.Text
        If Label1.Text.Length = 800 Then
            Label2.ForeColor = Color.Red
            Label2.Text = "Server EUW Down"
        Else
            Label2.ForeColor = Color.Green
            Label2.Text = "Server EUW ONLINE"
        End If
    End Function



Savez-vous d'où provient le problème ?

Code au complet :

Public Class Form1



    Function EUW()
        Dim EUWs As WebBrowser = New WebBrowser()
        EUWs.Navigate("http://www.islolup.com/")
        While Not EUWs.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
        End While
        Dim stat As String = EUWs.Document.GetElementById("detail1").InnerHtml

        Label1.Text = (stat)
        TextBox1.Text = Label1.Text
        If Label1.Text.Length = 800 Then
            Label2.ForeColor = Color.Red
            Label2.Text = "Western European Servers Down"
        Else
            Label2.ForeColor = Color.Green
            Label2.Text = "Western European Servers ONLINE"
        End If
    End Function
    Function KOREAN()
        Dim KOREANs As WebBrowser = New WebBrowser()
        KOREANs.Navigate("http://www.islolup.com/")
        While Not KOREANs.ReadyState = WebBrowserReadyState.Complete
            On Error Resume Next
            On Error GoTo 0
            Application.DoEvents()
        End While
        Dim stat2 As String = KOREANs.Document.GetElementById("detail1").InnerHtml
        Label4.Text = (stat2)
        TextBox2.Text = Label4.Text
        If Label4.Text.Length = 800 Then
            Label3.ForeColor = Color.Red
            Label3.Text = "Korean Servers Down"
        Else
            Label3.ForeColor = Color.Green
            Label3.Text = "Korean Servers ONLINE"
        End If
    End Function
    Function USN()
        Dim USNs As WebBrowser = New WebBrowser()
        USNs.Navigate("http://www.islolup.com/")
        While Not USNs.ReadyState = WebBrowserReadyState.Complete
            On Error Resume Next
            On Error GoTo 0
            Application.DoEvents()
        End While
        Dim stat3 As String = USNs.Document.GetElementById("detail0").InnerHtml
        Label11.Text = (stat3)
        If Label11.Text.Length = 800 Then
            Label12.ForeColor = Color.Red
            Label12.Text = "North American Servers Down"
        Else
            Label12.ForeColor = Color.Green
            Label12.Text = "North American Servers ONLINE"
        End If
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        EUW()
        KOREAN()
        USN()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        EUW()
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        KOREAN()
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        USN()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Label8.Text = (refreshtime.Interval / 60000)
        If RadioButton1.Checked = True Then
            refreshtime.Interval = (ComboBox1.Text * 60000)
        End If

        If Label10.Text = test.Text Then
        Else
            Label10.Text = test.Text
        End If
    End Sub
    Private Sub refreshtime_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles refreshtime.Tick
        test.Text = test.Text + 1
    End Sub

    
End Class


En attente de vos réponses ,
cordialement
Cliquetde8

4 réponses

cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
1 janv. 2014 à 04:08
Salut

Moi, je ne vois pas d'appel à tes fonctions depuis les timer ...

Premier reflexe : Ajouter les options Strict et Explicit en service pour éviter que le compilo ait a interpréter, des fois faussement, les opérations (notament).
Ajouter un chiffre à un texte n'est jamais bien bon.

Second reflexe : Supprimer ce qui ne sert à rien :
- Le "On Error Resume Next" et le suivant dans le Do-Loop
- La 2ème structure If-Then-Else dans le Timer1_Tick

Ensuite, quand tu utilises un Timer, prends la précaution de l'arrêter dès que les opérations que tu vas faire à l'intérieur risquent de dépasser le temps d'une scrutation, par exemple, dès que tu commences à utiliser des DoEvents dans des Do-Loop
+ le redémarrer avant de sortir

Essaye de mettre des "Console.WriteLine "Début"" en début et fin de fonction pour vérifier le temps d'exécution complet
+ verrouillage des boutons (Enabled = False) tant que la fonction n'est pas terminée.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 1/01/2014 à 08:25
Bonjour (et un salut à jack)
Je me pose quant à moi de nombreuses questions :
- en ce qui concerne la permissivité de VB.Net face à des opérations arithmétiques sur des textes :
ComboBox1.Text * 60000
test.Text + 1
(en espérant par ailleurs qu'un article ait été préalablement sélectionné dans la ComboBox1 et que sa valeur soit numérique ...)
- la valeur par défaut (avant de cocher RadioButton1) de l'intervalle du timer refreshtime
- la valeur qui serait donnée à l'intervalle du timer refreshtime lorsque l'on décocherait ensuite RadioButton1
Et ce ne sont pas là les seules questions que je me pose...je "vois" des fonctions qui ne sont que des routines, des gestions d'erreur bizarres (et son attention a pourtant été appelée sur cet aspect dans une discussion antérieure ...) , une expression conditionnelle qui ne fait que ramener à un résultat unique, etc ... (mais ces aspects-là me paraissent, eux, "inoffensifs")

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
NHenry
Messages postés
14967
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2022
161
1 janv. 2014 à 14:14
Merci de lire ma signature, car la remarque de Ucfoutu est très pertinente.
0
cliquetde8
Messages postés
52
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
29 avril 2015

Modifié par cliquetde8 le 1/01/2014 à 15:45
Bonjour , j'ai modifié quelques lignes de mon code , et j'ai remarquer la chose suivant , des que mon refreshtime (timer) fait un tour , les fonction ce refresh et l'application plante , alors que ces fonctions ne sont pas appelé :

refreshtime code :

Private Sub refreshtime_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles refreshtime.Tick
        test.Text = test.Text + 1
    End Sub



Et j'ai remplacé le timer1 par :

 Private Sub ComboBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
        Label8.Text = (refreshtime.Interval / 60000)
        If RadioButton1.Checked = True Then
            refreshtime.Interval = (ComboBox1.Text * 60000)
        End If


Mes fonctions :

EUW :

Dim EUWs As WebBrowser = New WebBrowser()
        EUWs.Navigate("http://www.islolup.com/")
        While Not EUWs.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
        End While
        Dim stat As String = EUWs.Document.GetElementById("detail1").InnerHtml
        Label1.Text = (stat)
        TextBox1.Text = Label1.Text
        If Label1.Text.Length = 800 Then
            Label2.ForeColor = Color.Red
            Label2.Text = "Western European Servers Down"
        Else
            Label2.ForeColor = Color.Green
            Label2.Text = "Western European Servers ONLINE"
        End If


KOREAN :

Dim KOREANs As WebBrowser = New WebBrowser()
        KOREANs.Navigate("http://www.islolup.com/")
        While Not KOREANs.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
        End While
        Dim stat2 As String = KOREANs.Document.GetElementById("detail1").InnerHtml
        Label4.Text = (stat2)
        TextBox2.Text = Label4.Text
        If Label4.Text.Length = 800 Then
            Label3.ForeColor = Color.Red
            Label3.Text = "Korean Servers Down"
        Else
            Label3.ForeColor = Color.Green
            Label3.Text = "Korean Servers ONLINE"
        End If



USN :

 Dim USNs As WebBrowser = New WebBrowser()
        USNs.Navigate("http://www.islolup.com/")
        While Not USNs.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
        End While
        Dim stat3 As String = USNs.Document.GetElementById("detail0").InnerHtml
        Label11.Text = (stat3)
        If Label11.Text.Length = 800 Then
            Label12.ForeColor = Color.Red
            Label12.Text = "North American Servers Down"
        Else
            Label12.ForeColor = Color.Green
            Label12.Text = "North American Servers ONLINE"
        End If



Donc celons mes observations , à la fin d'une boucle de mon refreshtime les fonction s'exécute toutes seuls , savez-vous pourquoi ?
PS : Le site web d'ou j'extrais les infos ce refresh tout seul toute les minutes , est-ce du à cela ?
En attente de vos réponses,
Cordialement
Cliquetde8
0
NHenry
Messages postés
14967
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2022
161
1 janv. 2014 à 16:19
Les fonctions ne s'exécutent pas toutes seule.

As-tu vérifier par un point d'arrêt ?
As-tu essayer de mettre en pause ton timet au début de l'evenement, avec Enabled=False et mettre à True à la fin ?
0
cliquetde8
Messages postés
52
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
29 avril 2015

1 janv. 2014 à 17:27
Le site web d'ou j'extrais les infos ce refresh tout seul toute les minutes , est-ce du à cela ?
0
NHenry
Messages postés
14967
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2022
161
1 janv. 2014 à 17:36
Je ne penses pas, as-tu vérifier les points que je t'ai suggérer ?
0
cliquetde8
Messages postés
52
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
29 avril 2015

1 janv. 2014 à 19:44
Oui , la fonction ce répète.
0
NHenry
Messages postés
14967
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2022
161
1 janv. 2014 à 19:50
As-tu essayé de mettre Enabled à False au début de ta sub du Timer et à True en fin ?
0