2010-12-10 38 views
0


我需要一些更多的幫助。我是線程的noob,我正在申請
vb.net。
基本上,我的應用程序所做的是在Lotus Notes中搜索我需要的信息
,而它正在搜索信息,我需要一個Gif來顯示一些
動畫。由於限制原因,我不想使用backgroundworker。所以我需要
使用線程。vb.net與winform中的線程


這是我的代碼有


    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 

當我使用調試器,我的代碼將凍結大約txtSearchUsager.Enabled =假 任何人都可以請幫助我,我是conf使用

感謝 Gibit

+2

你指的是什麼「約束理由」?這看起來像是一個近乎完美的BackgroundWorker用法。 (不要與你的決定爭辯,只是試圖理解它,所以我可以用這個問題來解決問題) – 2010-12-10 15:55:20

+0

哦,只是我的客戶的一些限制。事情是我的應用程序可能會在筆記中進行更多的搜索,並且我們不想爲每個搜索添加一個後臺工作程序。我們將使用更多線程 – GIBIT 2010-12-10 15:59:55

+0

多個後臺工作者有什麼問題?我預計它仍然是管理多個搜索的最簡單方法。如果你有VB 2010,你可以聲明事件處理程序內聯爲lambda表達式。一個例程可以保存一個搜索的所有代碼。 – MarkJ 2010-12-11 12:38:31

回答

1

您必須包括所有的函數調用(包括改變文本框的Enabled屬性),在一個單獨的功能及調用這個函數在有Me.Invoke或Me.BeginInvoke的委託。

+0

因此,所有修改我的UI的代碼應該通過委託調用? – GIBIT 2010-12-10 15:58:32