2013-10-04 3 views
0

J'ai écrit ci-dessous du code. Lorsque je clique sur un bouton, une fenêtre se fige même si j'ai utilisé le filetage. L'événement de clic du bouton 2 commence lorsque la tâche du bouton 1 est terminée. Je veux courir et commencer le traitement dès que je clique sur le bouton. Même lorsque je clique sur le bouton 1 Je ne peux pas bouger sous forme de fenêtres ... J'utilise Visual Studio 2008VB.Net Multithreading Windows Form

Imports System.Threading 

Public Class MultiThreading 

    Dim i As Integer 
    Dim i2 As Integer 
    Dim thread As System.Threading.Thread 
    Dim thread2 As System.Threading.Thread 
    Delegate Sub DelegateCountup() 
    Delegate Sub DelegateCountup2() 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     thread = New System.Threading.Thread(AddressOf countup) 
     thread.Start() 
    End Sub 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
     thread2 = New System.Threading.Thread(AddressOf countup2) 
     thread2.Start() 
    End Sub 

    Private Sub countup() 
     If InvokeRequired Then 
      Dim d As New DelegateCountup(AddressOf countup) 
      Me.Invoke(d) 
     Else 
      Do Until i = 2000 
       i = i + 1 
       Label1.Text = i 
       Me.Refresh() 
      Loop 
     End If 
    End Sub 
    Private Sub countup2() 
     If InvokeRequired Then 
      Dim d As New DelegateCountup(AddressOf countup2) 
      Me.Invoke(d) 
     Else 
      Do Until i2 = 1000 
       i2 = i2 + 1 
       Label2.Text = i2 
       Me.Refresh() 
      Loop 
     End If 
    End Sub 
End Class 
+1

Vous devriez utiliser la classe Backgrounworker à la place. –

Répondre

2

Au lieu d'utiliser la construction de filetage normal, utilisez la classe BackgroundWorker. Cela permettra de garder l'interface utilisateur sensible. Une question similaire est posée here

+0

J'ai repoussé cette! –