【问题标题】:thread in vb.net with winform使用winform在vb.net中线程
【发布时间】:2010-12-10 15:50:50
【问题描述】:


我需要更多帮助。我是线程方面的菜鸟,我正在
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 附近 谁能帮帮我,我很困惑

谢谢 千兆

【问题讨论】:

  • 您指的是什么“限制原因”?这看起来像是对 BackgroundWorker 的近乎完美的使用。 (不与您的决定争论,只是试图理解它,以便我可以考虑到这个问题)
  • 哦,只是我的客户的一些限制。问题是我的应用程序可能会在笔记中完成更多搜索,我们不想为每个搜索添加后台工作人员。我们将使用更多线程
  • 多个后台工作人员有什么问题?我希望它仍然是管理多个搜索的最简单方法。如果您有 VB 2010,您可以将事件处理程序内联声明为 lambda。一个例程可以保存一次搜索的所有代码。

标签: .net vb.net multithreading


【解决方案1】:

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

【讨论】:

  • 所以所有修改我的 UI 的代码都应该通过委托调用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2011-12-11
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多