IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Thread avec passage de paramétres


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut Thread avec passage de paramétres
    Bonsoir j'ai une question simple mais dont je ne trouve pas la réponse, en effet je possède une fonction qui prend 2 paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub envoi_sms(ByVal numero As String, ByVal message As String)
    Cette procédure envoi des données vers le port série, et je souhaiterais utilisé un thread pour utilisé la procédure car celle ci bloque le programme lorsque elle s’exécute.
    Auriez vous un lien explicatif sur le passage de paramètre dans un thread ? si cela est possible ?

    d'avance merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    la classe system.threading.thread permet juste de passer un paramètre as object (as object signifie qu'on peut mettre ce qu'on veut, y compris un tableau avec diverses variables)
    ca reste peu pratique

    depuis vs 2010 (ou 2012 je sais plus) on peut faire des méthodes anonymes et donc écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim th as new system.threading.thread(sub() 
                                                                maméthode(var1, var2)
                                                         end sub)
    sinon il est aussi possible de mettre tes paramètres dans des variables de classe
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2014
    Messages : 63
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    J'avais fait face au même problème et pour ma pars j'ai envoyé mes 3 paramètres dans une string sous la forme "parametre1#parametre2#parametre3" et au début du thread il décomposait le string pour retrouver ces petit (oui je sais c'est moche et pas optimisé mais bon dans l'urgence , la prochaine fois j’essayerai avec un tableau ou une collection )

    Voilà ce que j'ai fait (dans mon cas mon thread est présent pour écouter le trafic UDP entrant sur un port donné)

    Au chargement du programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub initialiser_ecoute()
            Ecoute = New System.ComponentModel.BackgroundWorker
            ' on configure le thread 
            Ecoute.WorkerReportsProgress = True
            Ecoute.WorkerSupportsCancellation = True
    End Sub
    Lorsque je veut recevoir un message j'appelle cette procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub recevoir_message(ByVal local_p As Integer, ByVal ip_src As String, ByVal port_src As Integer, ByVal boucle_infini As Boolean)
            boucle = boucle_infini
            parametre_ecoute = local_p & "#" & ip_src & "#" & port_src
            If Ecoute.IsBusy = False Then
                Ecoute.RunWorkerAsync(parametre_ecoute)
            End If
    End Sub
    La procédure qui récupère le message UDP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Private Sub Ecoute_démaré(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Ecoute.DoWork
            'declaration
            Dim lport As Integer
            Dim dip_string As String
            Dim dip As IPAddress
            Dim dport As String
            Dim parametre As String
            Dim car_scanne As String
            Dim pos_1 As Integer = Nothing
            Dim pos_2 As Integer = Nothing
            Dim flag_nb As Boolean = False
            parametre = e.Argument
            'récupération des variables
            For pos_scan_car As Integer = 0 To parametre.Count() - 1 Step 1
                car_scanne = parametre.Chars(pos_scan_car)
                If car_scanne = "#" Then
                    If flag_nb = False Then
                        pos_1 = pos_scan_car
                        flag_nb = True
                    Else
                        pos_2 = pos_scan_car
                    End If
                End If
            Next
     
     
            lport = CInt(parametre.Substring(0, pos_1))
            dip_string = parametre.Substring(pos_1 + 1, pos_2 - pos_1 - 1)
            dport = parametre.Substring(pos_2 + 1, parametre.Count() - pos_2 - 1)
     
            'fin de récupération des variable, début de la procédure
            If dip_string = "any" Then
                dip = IPAddress.Any
            Else
                dip = IPAddress.Parse(dip_string)
            End If
            'On déclare une connexion UDP
            Dim receivingUdpClient As New UdpClient(lport)
            'On désigne un hote distant : tout le monde
            Dim RemoteIP As New System.Net.IPEndPoint(dip, dport)
            'On lance la réceptions des donnée
            Dim receiveBytes As [Byte]() = receivingUdpClient.Receive(RemoteIP)
            'on convertis les données recu
            Dim returnData As String = Encoding.ASCII.GetString(receiveBytes)
            'on prépare l'expédition du résultat au process principal
            e.Result = returnData
            'on ferme la connexion UDP
            receivingUdpClient.Close()
            'on stop le thread secondaire tout en renvoyant le résultat
            System.Threading.Thread.Sleep(100)
    End Sub
    La récupération du résultat (le message) depuis le thread
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Ecoute_terminé(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Ecoute.RunWorkerCompleted
            Dim recup_data As String = e.Result
            traiter_message_recu(recup_data)
    End Sub
    Puis ma sub traiter_message_recu que j'ai simplifié pour l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public sub traiter_message_recu(byval message as string)
          msgbox(message)
          ' on souhaite relancer l'écoute de manière automatique ou non ? (valeur boolean passé en parametre dans recevoir_message()
          If boucle = True Then
                Communication.Ecoute.RunWorkerAsync(parametre_ecoute)
          End If
    End sub
    J'espère que ça va aider

    Bonne journée

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/12/2009, 13h39
  2. Réponses: 4
    Dernier message: 02/05/2007, 16h18
  3. problème de includes avec passage de paramètres
    Par roxxxy dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2007, 14h28
  4. Fonction ouvre avec passage de paramètres
    Par nath-0-0 dans le forum WinDev
    Réponses: 4
    Dernier message: 20/11/2006, 12h51
  5. [Système] Appel d'un exe avec passage de paramètres
    Par licorne dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2006, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo