使用winform在vb.net中创建线程

时间:2010-12-10 15:50:50

标签: .net vb.net multithreading


我还需要一些帮助。我是线程的菜鸟,我正在使用
vb.net申请。
基本上,我的应用程序所做的是在Lotus Notes中搜索我需要的信息,在搜索信息时,我需要一个Gif来显示一些动画。出于约束原因,我不想使用backgroundworker。所以我需要使用线程。

这是我的代码


  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 = False附近冻结 任何人都可以帮助我,我很困惑

由于 Gibit

1 个答案:

答案 0 :(得分:1)

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