2017-08-31 1 views
0

Je suis nouveau dans le concept de threading dans VB .NET et j'en ai deux imbriqués pour chaque boucle et je veux un nouveau thread à chaque fois que la boucle est exécutée. Ce que je fais ici, c'est que j'appelle une fonction encore et encore avec des paramètres différents à l'aide de deux boucles imbriquées. Et ce que je veux, c'est chaque fois que j'appelle cette fonction qui s'exécute comme un nouveau fil.thread multiple dans une boucle imbriquée dans vb

Voici mon code -

  Dim threadCount As Integer = 1 
     Dim theradArray(100) As System.Threading.Thread 
     Dim copyProcessID As Integer = 0 

     For Each dest_path As String In destList 
      If Directory.Exists(dest_path) Then 




      'copy process 

      Dim copyProcessOBJ As copy 
      For index = 0 To sourceList.Count - 1 
       source = sourceList(index) 

       If source.isChecked = True Then 

        copyProcessID += 1 
        If cliRadioButton.Checked Then 
         cmdCopy(source.Path, dest_path) 
        Else 

         ProgressReports.Show() 
         copyProcessOBJ = New copy 
         threadCount += 1 
         theradArray(threadCount) = New _System.Threading.Thread(AddressOf copyProcessOBJ.guiCopy) 
         theradArray(threadCount).Start() 
         copyProcessOBJ.guiCopy(source.Path, dest_path, copyProcessID) 

        End If 

       End If 
      Next 

Ici, j'ai une classe nommée copie et un sous « guiCopy » intérieur de ce que je fais nouvelle instance de obj à chaque fois dans la boucle. De même que je veux un nouveau fil.

Mais j'ai un problème qui dit initialise une nouvelle instance de la classe Thread. Je suis désolé, je sais que c'est de ma faute si je ne sais pas comment l'implémenter.

juste besoin d'aide pour

+1

s'il vous plaît inclure le message complet d'exception. Aussi, que fait réellement la méthode copy.guiCopy? Combien de threads démarrez-vous, parce que je suis sûr que c'est un mauvais design, et votre problème pourrait être résolu d'une manière beaucoup plus simple, probablement des tâches d'utilisation ou une boucle parallel.for – Steve

Répondre

0
   Dim threadCount As Integer = 1 
      Dim theradArray(100) As System.Threading.Thread 
      Dim copyProcessID As Integer = 0 
      Dim threads As List(Of System.Threading.Thread) = New List(Of System.Threading.Thread) 
      For Each dest_path As String In destList 
       If Directory.Exists(dest_path) Then 
       Dim thr As System.Threading.Thread = New System.Threading.Thread(AddressOf yourfunction) 
       threads.Add(thr) 
       threads.LastOrDefault().Start() 
       End If 
       Next 

    Private Sub yourfunction() 

       Dim copyProcessOBJ As copy 
       For index = 0 To sourceList.Count - 1 
        source = sourceList(index) 

        If source.isChecked = True Then 

         copyProcessID += 1 
         If cliRadioButton.Checked Then 
          cmdCopy(source.Path, dest_path) 
         Else 

          ProgressReports.Show() 
          copyProcessOBJ = New copy 
          threadCount += 1 
          theradArray(threadCount) = New _System.Threading.Thread(AddressOf copyProcessOBJ.guiCopy) 
          theradArray(threadCount).Start() 
          copyProcessOBJ.guiCopy(source.Path, dest_path, copyProcessID) 

         End If 
    End If   

    End Sub 

    Next