2010-12-10 10 views
0


Ich brauche noch etwas Hilfe. Ich bin ein Anfänger bei Threading und ich mache eine Bewerbung auf
vb.net.
Im Grunde, was meine Anwendung ist es sucht in Lotus Notes für Informationen, die ich brauche, während es nach der Information sucht, brauche ich ein Gif, um einige
Animation anzuzeigen. Ich möchte nicht Hintergrundarbeiter für Constraint Gründe verwenden. Also muss ich
Threads verwenden.Thread in vb.net mit Winform


Dies ist der Code, den ich


    Private Sub btnRechercheUtilisateur_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRechercheUtilisateur.Click 
     Dim t As New Thread(New ThreadStart(AddressOf RunInThread)) 
     t.Start() 
    End Sub 

Public Delegate Sub MyDelegate(ByVal arg As Integer) 
    Private Sub RunInThread() 
     Dim delInstatnce As New MyDelegate(AddressOf RechercheUtilisateurView) 
     Me.BeginInvoke(delInstatnce) 
     imgLoading.Visible = True 
     'Add your code that needs to be executed in separate thread 
     'except UI updation 
    End Sub 


Public Sub RechercheUtilisateurView() 
     'Vérifie si la session est valide 
     If notes.IsSessionValide = False Then 
      LoginPanel.Visible = True 
      Exit Sub 
     End If

'Vide la liste 
    lstSearchUsager.Items.Clear() 
    lstGroupesUsager.Items.Clear() 

    'Uncheck checbox 
    chkGroupesUsager.Checked = False 

    'UI Setting pour le loading 
    ' StartLoadingImg(172, 152) 
    txtSearchUsager.Enabled = False 
    btnRechercheUtilisateur.Enabled = False 

    'Ajoute les éléments de la liste 
    Dim users As List(Of UsagerNotes) = notes.GetUsagersByKeyword(txtSearchUsager.Text) 

    'Vérifier si un résultat a été retourné 
    If users.Count <> 0 Then 
     Dim rows(users.Count - 1) As ListViewItem 
     Dim counter As Integer = 0 
     'Loop d'ajout d'utilisateur au ListView 
     For Each u In users 
      Dim row As New ListViewItem 
      row.Text = u.nomCanonique 
      row.ImageKey = "1" 
      rows(counter) = row 
      counter += 1 
     Next 
     lstSearchUsager.Items.AddRange(rows) 

    Else 

     AddEvent("Aucun résultat trouvé pour la recherche utilisateur: " + txtSearchUsager.Text, "21") 

    End If 

     txtSearchUsager.Enabled = True 
    btnRechercheUtilisateur.Enabled = True 
    End Sub 

Wenn ich den Debugger verwenden, würde mein Code bei etwa txtSearchUsager.Enabled = False einfrieren Kann mir bitte jemand helfen, ich bin conf verwendet

Dank Gibit

+2

Auf welche "Einschränkungsgründe" beziehen Sie sich? Das sieht nach einer nahezu perfekten Nutzung von BackgroundWorker aus. (nicht mit Ihrer Entscheidung streiten, nur versuchen, es zu verstehen, so dass ich das Problem mit diesem Gedanken angehen kann) –

+0

oh nur einige Einschränkungen von meinen Kunden. Die Sache ist, meine Anwendung wird wahrscheinlich viel mehr Suchen in Notizen getan haben, und wir möchten nicht für jede Suche einen Hintergrund-Worker hinzufügen. Wir werden viel mehr Threading verwenden – GIBIT

+0

Was ist los mit mehreren Hintergrundarbeiter? Ich erwarte, dass es immer noch der einfachste Weg ist, mehrere Suchen zu verwalten. Wenn Sie VB 2010 haben, können Sie die Event-Handler inline als Lambdas deklarieren. Eine Routine könnte den gesamten Code für eine Suche enthalten. – MarkJ

Antwort

1

Sie alle Funktionsaufrufe enthalten muss (und die Eigenschaft enabled der Textbox ändern) in einer separaten Funktion und rufen Sie diese Funktion über einen Delegaten mit Me.Invoke oder Me.BeginInvoke.

+0

Also sollte der gesamte Code, der meine UI verändert, über einen Delegaten aufgerufen werden? – GIBIT

Verwandte Themen