Connexion reseau simple avec un thread

Description

C'est un mini code de débutant qui permet de se connecté à un réseau avec votre configuration IP par l'intermédiaire d'un thread.
Permet de découvrir de façon assez simple le mécanisme des threads. Vous pouvez également supprimer le code présent et y ajouter
les fonctions que vous souhaitez.
En utilisant biensur, les procédures inter threads ou encore en ajouter d'autre.

Deux petites chose à faire :

- Desactiver option strict dans la propriété compiler de visual studio
- Renseigner votre configuration IP dans la procédure : "SelectConnexion"

Source / Exemple :


Imports System.Net
Imports System.Net.NetworkInformation
Imports System.Threading

Public Class Principal

    '---------------------------------------------------------------------------------------------------
    'INITIALISATION DES FONCTIONS INTER THREAD
    '---------------------------------------------------------------------------------------------------
    Delegate Sub SetMessageCallback(ByVal [Message] As String)
    Delegate Sub SetProgressBarCallback(ByVal [Valeur] As Integer)
    Delegate Sub SetVisibleCallback(ByVal [Object] As Object, ByVal [Visible] As Boolean)
    Delegate Sub SetBtnEnableCallback(ByVal [Object] As Object, ByVal [Enable] As Boolean)
    Delegate Sub SetClearCallback(ByVal [Object] As Object, ByVal [Etat] As Boolean)

    '---------------------------------------------------------------------------------------------------
    'DECLARATION DU THREAD PRINCIPAL
    '---------------------------------------------------------------------------------------------------
    Public ThreadConnexion As New Threading.Thread(AddressOf SelectConnexion)

#Region "Thread"

#Region "Procédures inter-Threads"

    Private Sub SetClear(ByVal [Object] As Object, ByVal [Etat] As Boolean)

        'Efface un objet
        If [Object].InvokeRequired Then
            Dim d As New SetClearCallback(AddressOf SetClear)
            Me.Invoke(d, New Object() {[Object], [Etat]})
        Else
            If [Etat] = True Then
                [Object].clear()
            End If
        End If

    End Sub

    Private Sub MessageInfo(ByVal [Message] As String)

        'Affiche un message d'info 
        If Me.txtInfo.InvokeRequired Then
            Dim d As New SetMessageCallback(AddressOf MessageInfo)
            Me.Invoke(d, New Object() {[Message]})
        Else
            If Me.txtInfo.Text = String.Empty Then
                Me.txtInfo.Text = [Message]
            Else
                Me.txtInfo.Text &= vbCrLf & [Message]
            End If

        End If

    End Sub

    Private Sub SetProgressBar(ByVal [Value] As Integer)

        'Modifie la valeur de la progressbar
        If Me.PB1.InvokeRequired Then
            Dim d As New SetProgressBarCallback(AddressOf SetProgressBar)
            Me.Invoke(d, New Object() {[Value]})
        Else
            PB1.Value = [Value]
        End If

    End Sub

    Private Sub SetVisible(ByVal [Object] As Object, ByVal [Visible] As Boolean)

        'Affichage d'un objet
        If [Object].InvokeRequired Then
            Dim d As New SetVisibleCallback(AddressOf SetVisible)
            Me.Invoke(d, New Object() {[Object], [Visible]})
        Else
            [Object].Visible = [Visible]
        End If

    End Sub

    Private Sub SetBtnEnable(ByVal [Object] As Object, ByVal [Enable] As Boolean)

        'Active/désactive un objet
        If [Object].InvokeRequired Then
            Dim d As New SetBtnEnableCallback(AddressOf SetBtnEnable)
            Me.Invoke(d, New Object() {[Object], [Enable]})
        Else
            If [Enable] = True Then
                [Object].Enabled = True
            ElseIf [Enable] = False Then
                [Object].Enabled = False
            End If
        End If

    End Sub

#End Region

#Region "Selection du réseau"

    Private Sub SelectConnexion()

        While ThreadConnexion.ThreadState = ThreadState.Running

            SetBtnEnable(btnCI, False)
            SetVisible(PB1, True)
            SetVisible(lblAnalyse, True)
            SetClear(txtInfo, True)

            SetProgressBar(0)
            MessageInfo("---------------------------------------------------------")
            MessageInfo("Configuration adresse IP")
            Shell("netsh interface ipv4 set address name=Wireless static 192.168.0.2 255.255.255.0 192.168.0.1", AppWinStyle.Hide)
            Thread.Sleep(2000)
            SetProgressBar(25)
            MessageInfo("Configuration DNS")
            Shell("netsh interface ipv4 set dnsserver name=Wireless static 192.168.0.1 primary")
            Thread.Sleep(2000)
            SetProgressBar(50)
            MessageInfo("Connexion réseau San-fil")
            Shell("netsh wlan connect name=Wireless ssid=SSID")
            MessageInfo("Activation des paramètres")
            MessageInfo("---------------------------------------------------------")
            Thread.Sleep(4000)
            SetProgressBar(75)
            SetProgressBar(100)
            Thread.Sleep(100)
            SetBtnEnable(btnCI, True)
            SetVisible(PB1, False)
            SetVisible(lblAnalyse, False)
            Me.ThreadConnexion.Suspend()

        End While

    End Sub

    Private Sub Selection(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCI.Click

        Cursor.Current = Cursors.WaitCursor

        If ThreadConnexion.ThreadState = ThreadState.Unstarted Then
            ThreadConnexion.Start()
        ElseIf ThreadConnexion.ThreadState = ThreadState.Suspended Then
            ThreadConnexion.Resume()
        End If

        Cursor.Current = Cursors.Default

    End Sub

#End Region

#End Region

End Class

Conclusion :


Inspiré pour les threads du code de slyderkiller :
http://www.vbfrance.com/codes/REDIMENSIONNEMENT-PHOTOS-LOTS-MULTITACHES_42762.aspx

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.