Netwerk Controle

Status
Niet open voor verdere reacties.

bitchkoemer

Gebruiker
Lid geworden
3 aug 2006
Berichten
39
Hallo VB'ers

Alhoewel Visual Basic 2005 nieuw is voor mij zou ik onderstaand probleem moeten kunnen oplossen, ik heb wel ervaring met VB1.0 (lang geleden:D ) en met VBA.

Ik wil echter een stand alone progje maken en dat kan enkel met met VB2005 express (gratis)

Wat wil ik doen, alvorens er iets wordt uitgevoerd moet er gecontroleert worden of de netwerkverbinding in orde is.

Zo neen meldt dit en wacht tot de verbinding in orde is
Zo ja meldt dit en ga verder met het programma

(hierna wil ik nog een PING en een FTP controle doen, maar zover kom ik voorlopig niet....:shocked:

Ik maakte een "form1" met daarop een "textbox1" en schreef hiervoor onderstaande code:

Code:
Public Class Form1

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

        Check_Network()

    End Sub

    Private Sub Check_Network()

        Dim isBeschikbaar As Boolean

        If isBeschikbaar = False Then
            TextBox1.Text = "Het Netwerk is niet beschikbaar"
            TextBox1.BackColor = Color.Red
            TextBox1.ForeColor = Color.White
        End If

        While Not isBeschikbaar
            isBeschikbaar = My.Computer.Network.IsAvailable
        End While

        TextBox1.Text = "Het Netwerk is beschikbaar"
        TextBox1.BackColor = Color.Green
        TextBox1.ForeColor = Color.White

    End Sub

End Class

Wat blijkt nu, als het netwerk aanwezig is en het progje wordt gestart werkt alles prima, het form verschijnt en de juiste tekst staat ingevuld.

Is echter het netwerk niet aanwezig (RJ45 uitgetrokken) en wordt het programma gestart dan gebeurt er schijnbaar niets, van zodra de kabel terug wordt ingestoken verschijnt het form met de melding dat het netwerk ok is......

Blijkbaar "hangt" het programma zolang er geen netqwerkverbinding is....

Iemand enig idee?

Alvast bedankt,

BTW, wat is de beste manier om hier een "project" neer te zetten zodat iedereen het vlot kan bekijken/editten?
 
Als de code verder werkt is je code gewoon niet goed geschreven. Hieronder aangepast.

Code:
Public Class Form1

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

        Check_Network()

    End Sub

    Private Sub Check_Network()

        Dim isBeschikbaar As Boolean

        isBeschikbaar = My.Computer.Network.IsAvailable

        If isBeschikbaar = False Then
            TextBox1.Text = "Het Netwerk is niet beschikbaar"
            TextBox1.BackColor = Color.Red
            TextBox1.ForeColor = Color.White
        End If

        While Not isBeschikbaar
            isBeschikbaar = My.Computer.Network.IsAvailable
        End While

        TextBox1.Text = "Het Netwerk is beschikbaar"
        TextBox1.BackColor = Color.Green
        TextBox1.ForeColor = Color.White

    End Sub

End Class

Zie de extra check op My.Computer.Network.IsAvailable in het begin.

Tijs.
 
Het klopt wel dattie blijft hangen, namelijk in de While loop die je doet.

"Zolang IsBeschikbaar is false: Vul IsBeschikbaar met de netwerk status"

En zolang de netwerk status is "false" zal hij dus die opdracht blijven doen. als je de stekker er weer in drukt word de variabele true en schiet hij uit de loop.

Dus het programma blijft netjes wachten totdat je netwerk hebt.
Wat je kan doen is de while loop uitbreiden met de vraag of men wil wachten voor een bepaalde periode (10 sec) en dan opnieuw proberen, of de applicatie gewoon wil sluiten.

Ben niet echt thuis in vb maar kan wel code lezen :)
Zet voor jezelf ook de debug stand aan dat je staps gewijs je code kan uitvoeren, dan merk je vanzelf waar je blijft hangen
 
Laatst bewerkt:
Hallo Tijs,

Als de code verder werkt is je code gewoon niet goed geschreven. Hieronder aangepast.

Zie de extra check op My.Computer.Network.IsAvailable in het begin.

Tijs.

Deze lijn stond er bij mij oorspronkelijk ook, is allicht door het vele wijzigen en testen achterwege gebleven...:o

Maar zelfs met deze lijn erbij lukt het niet.

Zie ook antwoord hieronder

Alvast bedankt voor het meedenken,
 
Even mijn informatie en die van Ellasar gecombineerd:

Code:
Public Class Form1

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

        Check_Network()

    End Sub

    Private Sub Check_Network()

        Dim isBeschikbaar As Boolean

        isBeschikbaar = My.Computer.Network.IsAvailable

        If Not isBeschikbaar Then
            TextBox1.Text = "Het Netwerk is niet beschikbaar"
            TextBox1.BackColor = Color.Red
            TextBox1.ForeColor = Color.White
        End If

        If isBeschikbaar Then
            TextBox1.Text = "Het Netwerk is beschikbaar"
            TextBox1.BackColor = Color.Green
            TextBox1.ForeColor = Color.White
        End If

    End Sub

End Class
 
Hallo,

Het klopt wel dattie blijft hangen, namelijk in de While loop die je doet.

"Zolang IsBeschikbaar is false: Vul IsBeschikbaar met de netwerk status"

En zolang de netwerk status is "false" zal hij dus die opdracht blijven doen. als je de stekker er weer in drukt word de variabele true en schiet hij uit de loop.

Dus het programma blijft netjes wachten totdat je netwerk hebt.

Dat is inderdaad ook de bedoeling, wachten tot het netwerk beschikbaar is en dan verder gaan maar.......

als het netwerk niet beschikbaar is tijdens het starten dan worden de instructies binnen:

Code:
If isBeschikbaar = False Then
         TextBox1.Text = "Het Netwerk is niet Beschikbaar"
         TextBox1.BackColor = Color.Red
         TextBox1.ForeColor= Color.White
End If

uitgevoerd alvorens naar de While - Wend lus te gaan, het form zou dan moeten verschijnen met de tekst en kleuren uit bovenstaande If Then.

Er gebeurt echter gewoon niets, het form blijft onzichtbaar, pas als de netwerk connectie hersteld wordt toont het programma netjes "Het Netwerk is Beschikbaar"

Als je de code step by step doorloopt gaat alles prima (het form verschijnt echter ook niet),

Zonder netwerk gaat hij door de If Then (maar toont niets) en blijft daarna loopen in de While Wend.

Met netwerk gaat hij ineens naar het gedeelte na de While Wend en toont het form op correcte wijze.

Bizar.......

Alvast bedankt voor het meedenken.
 
Zet dan dat

Code:
        While Not isBeschikbaar
            isBeschikbaar = My.Computer.Network.IsAvailable
        End While
in mijn laatstgeposte code, vóór If isBeschikbaar Then [...]

Dan moet het toch goed zijn?
 
Even mijn informatie en die van Ellasar gecombineerd:

Code:
Public Class Form1

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

        Check_Network()

    End Sub

    Private Sub Check_Network()

        Dim isBeschikbaar As Boolean

        isBeschikbaar = My.Computer.Network.IsAvailable

        If Not isBeschikbaar Then
            TextBox1.Text = "Het Netwerk is niet beschikbaar"
            TextBox1.BackColor = Color.Red
            TextBox1.ForeColor = Color.White
        End If

        If isBeschikbaar Then
            TextBox1.Text = "Het Netwerk is beschikbaar"
            TextBox1.BackColor = Color.Green
            TextBox1.ForeColor = Color.White
        End If

    End Sub

End Class

Het is dus wel de bedoeling dat het blijft "loopen" totdat het netwerk aanwezig is, het probleem is dus dat indien het netwerk tijdens het starten van het progje niet aanwezig is het form gewoonweg niet tevoorschijn komt met de tekst "Het Netwerk is NietBeschikbaar".
 
ook dat is logisch, je sub Form1_Load word niet afgerond zolang hij in de sub check_network blijft loop-en. Dus word je form niet geladen

Maak van je form_load eens form_activate
 
Laatst bewerkt:
ook dat is logisch, je sub Form1_Load word niet afgerond zolang hij in de sub check_network blijft loop-en. Dus word je form niet geladen

Maak van je form_load eens form_activate

Form_Activate staat er niet bij, Form_Activated wel,

Dit lost echter het probleem niet op :(
 
Nog een poging, en nu While WEND ipv. While End While.

Code:
Public Class Form1

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

        Check_Network()

    End Sub

    Private Sub Check_Network()

        Dim isBeschikbaar As Boolean

        isBeschikbaar = My.Computer.Network.IsAvailable

        If Not isBeschikbaar Then
            TextBox1.Text = "Het Netwerk is niet beschikbaar"
            TextBox1.BackColor = Color.Red
            TextBox1.ForeColor = Color.White
        End If

        While Not isBeschikbaar 
            isBeschikbaar = My.Computer.Network.IsAvailable
        Wend

        If isBeschikbaar Then
            TextBox1.Text = "Het Netwerk is beschikbaar"
            TextBox1.BackColor = Color.Green
            TextBox1.ForeColor = Color.White
        End If

    End Sub

End Class

Tijs.
 
Hoi bitchkoemer,

Ik heb niet de hele post gelezen (ff snel) maar waarom gebruik je geen timer.

Zet deze op 1 (1000) of .5 seconde(500) en laat die elke keer controleren of je netwerk-verbinding hebt.
 
Hallo,

Hoi bitchkoemer,

Ik heb niet de hele post gelezen (ff snel) maar waarom gebruik je geen timer.

Zet deze op 1 (1000) of .5 seconde(500) en laat die elke keer controleren of je netwerk-verbinding hebt.

'k Heb uiteindelijk voor deze werkwijze gekozen en het programmaatje krijgt stillaan vorm.

Alvast bedankt allemaal voor het meedenken, bij nieuwe problemen kom ik hier terug om kennis bedelen:shocked:
 
Code:
 Public Sub CheckVoorNetVerbinding()

        Dim wRequest As System.Net.HttpWebRequest
        Dim wResponse As System.Net.HttpWebResponse

        AddHandler My.Computer.Network.NetworkAvailabilityChanged, _
        AddressOf NetwerkVerbinding_Verandert

        Try
            wRequest = CType(System.Net.WebRequest.Create("http://www.google.com/"),  _
            System.Net.HttpWebRequest)
            wResponse = CType(wRequest.GetResponse(), System.Net.HttpWebResponse)
            If wResponse.StatusCode.ToString().Equals("OK") Then
                MessageBox.Show("Er is succesvol verbinding gemaakt", Application.ProductName, _
                                MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Er kan geen verbinding worden gelegd", Application.ProductName, _
                                MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Source.ToString & vbNewLine & "Proxy fout, u heeft " & _
                            "mogelijk geen toegang tot het internet", Application.ProductName, _
                                MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Public Sub NetwerkVerbinding_Verandert(ByVal sender As System.Object, _
    ByVal e As Microsoft.VisualBasic.Devices.NetworkAvailableEventArgs)
        If e.IsNetworkAvailable Then
            CheckVoorNetVerbinding()
        End If
    End Sub

zo hoef je gn handler en het is een veel betere controle dan die je van vb aangeboden krijgt,
ik geloof echter wel dat er nog een klein probleempje inzit wanneer er er nog steeds verbonden wordt met internet omdat je dan meet een loop zit...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan