none
passage de parametre dans un thread RRS feed

  • Question

  • Bonjour,

    je viens de nouveau vous voir pour avoir un peu aide en vb.net. J'espere que ce post n'est pas une redondance d'un autre post deja publié ici.

    je bloque sur quelque chose de simple je pense, mais je n'arrive pas a voir comment résoudre mon probleme.

    voila ce que j'ai fait

    Private Sub action() Dim i As Integer ChangCheck(i, False) 'actions interne au programme' End Sub Private Sub action1() If Me.InvokeRequired Then Dim a1 As Thread = New Thread(AddressOf action) a1.Start(3) 'traitements internes' a1.start(1)

    'traitements internes'

    end if end sub

    lorsque je mets a1.start(3), (ou i = 3 a cet instant) le programme me sort une erreur uniquement a l'execution. Si je mets juste a1.start(), il n'y a pas de soucis.

    action1 est un bout de code de 3 lignes qui s'insere dans le 'traitement interne' et vu que c'est juste un peu trop long (presque 100 lignes de repetition) je souhaite passer ca dans une fonction qui me reduirait mon bout de code de plusieurs dizaines de lignes.

    Y a t il une solution pour faire a1.start(i) ?

    merci par avance de votre aide et de vos solutions

    cordialement

    Lunick

    lundi 24 septembre 2012 09:54

Réponses

  • Bonjour,

    je viens de nouveau vous voir pour avoir un peu aide en vb.net. J'espere que ce post n'est pas une redondance d'un autre post deja publié ici.

    je bloque sur quelque chose de simple je pense, mais je n'arrive pas a voir comment résoudre mon probleme.

    voila ce que j'ai fait

    Private Sub action() Dim i As Integer ChangCheck(i, False) 'actions interne au programme' End Sub Private Sub action1() If Me.InvokeRequired Then Dim a1 As Thread = New Thread(AddressOf action) a1.Start(3) 'traitements internes' a1.start(1)

    'traitements internes'

    end if end sub

    lorsque je mets a1.start(3), (ou i = 3 a cet instant) le programme me sort une erreur uniquement a l'execution. Si je mets juste a1.start(), il n'y a pas de soucis.

    action1 est un bout de code de 3 lignes qui s'insere dans le 'traitement interne' et vu que c'est juste un peu trop long (presque 100 lignes de repetition) je souhaite passer ca dans une fonction qui me reduirait mon bout de code de plusieurs dizaines de lignes.

    Y a t il une solution pour faire a1.start(i) ?

    merci par avance de votre aide et de vos solutions

    cordialement

    Lunick

    Bonjour,

    Voici le code que vous souhaitez. Il faut utiliser les ParameterizedThreadStart pour passer un élément en paramètre de votre thread.

    Private Sub action(i As Integer)
       ChangCheck(i, False) 'actions interne au programme' 
    End Sub
    
    Private Sub action1()
       If Me.InvokeRequired Then
          Dim a1 As Thread = New Thread(New ParameterizedThreadStart(AddressOf action))
          a1.Start(3) 'traitements internes'
          a1 = New Thread(New ParameterizedThreadStart(AddressOf action))
          a1.Start(1)
          'traitements internes'
       End If
    End Sub

     

    Cordialement


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !


    • Modifié Lyamine lundi 24 septembre 2012 13:50
    • Marqué comme réponse Lunick mercredi 26 septembre 2012 05:16
    lundi 24 septembre 2012 11:06

Toutes les réponses

  • Bonjour,

    je viens de nouveau vous voir pour avoir un peu aide en vb.net. J'espere que ce post n'est pas une redondance d'un autre post deja publié ici.

    je bloque sur quelque chose de simple je pense, mais je n'arrive pas a voir comment résoudre mon probleme.

    voila ce que j'ai fait

    Private Sub action() Dim i As Integer ChangCheck(i, False) 'actions interne au programme' End Sub Private Sub action1() If Me.InvokeRequired Then Dim a1 As Thread = New Thread(AddressOf action) a1.Start(3) 'traitements internes' a1.start(1)

    'traitements internes'

    end if end sub

    lorsque je mets a1.start(3), (ou i = 3 a cet instant) le programme me sort une erreur uniquement a l'execution. Si je mets juste a1.start(), il n'y a pas de soucis.

    action1 est un bout de code de 3 lignes qui s'insere dans le 'traitement interne' et vu que c'est juste un peu trop long (presque 100 lignes de repetition) je souhaite passer ca dans une fonction qui me reduirait mon bout de code de plusieurs dizaines de lignes.

    Y a t il une solution pour faire a1.start(i) ?

    merci par avance de votre aide et de vos solutions

    cordialement

    Lunick

    Bonjour,

    Voici le code que vous souhaitez. Il faut utiliser les ParameterizedThreadStart pour passer un élément en paramètre de votre thread.

    Private Sub action(i As Integer)
       ChangCheck(i, False) 'actions interne au programme' 
    End Sub
    
    Private Sub action1()
       If Me.InvokeRequired Then
          Dim a1 As Thread = New Thread(New ParameterizedThreadStart(AddressOf action))
          a1.Start(3) 'traitements internes'
          a1 = New Thread(New ParameterizedThreadStart(AddressOf action))
          a1.Start(1)
          'traitements internes'
       End If
    End Sub

     

    Cordialement


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !


    • Modifié Lyamine lundi 24 septembre 2012 13:50
    • Marqué comme réponse Lunick mercredi 26 septembre 2012 05:16
    lundi 24 septembre 2012 11:06
  • bonjour,

    merci pour votre aide lyamine.

    cordialement

    Lunick

    mercredi 26 septembre 2012 05:17