0

ユーザーがADで特定のコンピューターの資産タグを検索できる、仕事用のプログラムに取り組んでいます。見つかった場合は、リストボックスにリストが表示されます。すべてが機能していますが、検索を行うと UI がフリーズします。私はVBとOOが初めてです。検索が UI と同じスレッドで実行されているため、フリーズしていることは理解していますが、私の人生では別のスレッドで作業を行うことはできません。別のスレッドで検索しようとしたとき、同じスレッド上にないため、リストボックスを更新できません。どんな助けでも大歓迎です。

AD を検索する関数:

   Private Function searchAd()

    'clear the results from previous entries
    ' AdResultListBox.Items.Clear()

    Try
        Dim rootEntry As New DirectoryEntry("GC://mydomaininfo")
        Dim searcher As New DirectorySearcher(rootEntry)

        'selects the Computer Name property
        searcher.PropertiesToLoad.Add("cn")


        Dim compname As String = PropertyTagTextbox.Text
        'searches using wildcards
        compname = "*" + compname + "*"

        searcher.Filter = "(&(name=" + compname + ")(objectcategory=moreADinformation))"

        Dim results As SearchResultCollection
        results = searcher.FindAll()

        Dim result As SearchResult


        For Each result In results

            'this is the part i'm having trouble with
            Me.AdResultListBox.Items.Add(result.Properties("cn")(0)

        Next

    Catch ex As Exception

    End Try
End Function



Private Sub ADSearchButton_Click(sender As Object, e As RoutedEventArgs) Handles ADSearchButton.Click
    AdResultListBox.Items.Clear()

    'create the new thread for searching
    Dim SearchThread As New Thread(AddressOf searchAd)
    SearchThread.Start()
End Sub
4

2 に答える 2

1

これが私が通常行う方法です。このInvoke関数はコントロールの一部であり、適切なスレッドで処理できるようにデリゲートを UI スレッドに渡します。

Invoke(Sub
          Me.AdResultListBox.Items.Add(result.Properties("cn")(0)
    End Sub)

http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx

于 2013-07-03T17:55:31.357 に答える