用winform实现vb.net中的线程

用winform实现vb.net中的线程,.net,vb.net,multithreading,.net,Vb.net,Multithreading,我需要更多的帮助。我是线程方面的新手,正在vb.net上开发应用程序。 基本上,我的应用程序所做的是在Lotus Notes中搜索我需要的信息,而在搜索信息时,我需要一个Gif来显示一些动画。出于约束原因,我不想使用backgroundworker。所以我需要使用线程 这是我的代码 公共子记录利用率表() “Vérifie si la session est valide 如果notes.IsSessionValide=False,则 LoginPanel.Visible=True 出口接头


我需要更多的帮助。我是线程方面的新手,正在vb.net上开发应用程序。
基本上,我的应用程序所做的是在Lotus Notes中搜索我需要的信息,而在搜索信息时,我需要一个Gif来显示一些动画。出于约束原因,我不想使用backgroundworker。所以我需要
使用线程


这是我的代码


公共子记录利用率表()
“Vérifie si la session est valide
如果notes.IsSessionValide=False,则
LoginPanel.Visible=True
出口接头
如果结束

”参见列表
lstSearchUsager.Items.Clear()
lstgroupeusager.Items.Clear()
'取消选中复选框
chkgroupeusager.Checked=False
'用户界面设置为可加载
'惊人的负荷img(172152)
txtSearchUsager.Enabled=False
BTNRECHERUSSIATER.Enabled=错误
“我的心在哪里
将用户设置为列表(UsagerNotes)=notes.GetUsagersByKeyword(txtSearchUsager.Text)
“这是苏丹的胜利。”
如果用户数为0,则
将行(users.Count-1)调整为ListViewItem
作为整数的Dim计数器=0
“使用列表视图的循环”
对于用户中的每个u
将行变暗为新的ListViewItem
row.Text=u.nomCanonique
row.ImageKey=“1”
行(计数器)=行
计数器+=1
下一个
lstSearchUsager.Items.AddRange(行)
其他的
附录(“Aucun résultat trouvépour la recherche use use:”+txtSearchUsager.Text,“21”)
如果结束
txtSearchUsager.Enabled=True
BTNRECHERUSISATEUR.Enabled=真
端接头

当我使用调试器时,我的代码将冻结在txtSearchUsager.Enabled=False左右 谁能帮帮我吗,我很困惑

谢谢
Gibit

您必须将所有函数调用(包括更改文本框的enabled属性)包含在一个单独的函数中,并通过带有Me.Invoke或Me.BeginInvoke的委托调用此函数。

您指的是什么“约束原因”?这看起来是BackgroundWorker近乎完美的用法。(不是和你的决定争论,只是试着去理解它,这样我就可以考虑这个问题)哦,只是我的客户的一些限制。问题是我的应用程序可能会有更多的搜索在notes中完成,我们不想为每个搜索添加一个后台工作程序。我们将使用更多的线程化多个后台工作人员有什么问题?我希望它仍然是管理多个搜索的最简单方法。如果您有VB 2010,则可以将事件处理程序内联声明为lambdas。一个例程可以保存一次搜索的所有代码。所以所有修改我的UI的代码都应该通过委托调用?

  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