Member 12561559 Ответов: 0

Vb.net обновление текстового поля из отдельного потока


Хорошо, это, вероятно, легко, и я сделал из этого правильное свинячье ухо, так что, пожалуйста, обнажитесь со мной, так как резьба для меня нова, но я пытаюсь понять из своих ошибок.

У меня есть основная форма, которая вызывает новый поток в подпространстве, расположенном в модуле.
В то время как sub обрабатывает (сканирует файлы), он должен обновить текстовое поле в другой форме (чтобы я проверил, открыто ли оно через глобальное логическое объявление, если оно истинно или нет. Если это правда (то есть форма открыта), то она вызовет субтекст settext (пример взят из примера MS, который является упрощенным примером других, которые я видел в интернете).

Итак, код выглядит следующим образом:
Форма Detailedlog (содержит одно текстовое поле, многострочное, полосы прокрутки-вертикальные)

Public Class DetailedLog
    Delegate Sub SetTextCallback([text] As String)

    Private Sub DetailedLog_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
        ShowingDetailedLog = False

        Me.Dispose()

    End Sub

    Private Sub DetailedLog_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        ShowingDetailedLog = True
    End Sub

    Public Sub SetText(ByVal [text] As String)
        Try
            ' InvokeRequired required compares the thread ID of the
            ' calling thread to the thread ID of the creating thread.
            ' If these threads are different, it returns true.
            If Me.TextBox1.InvokeRequired Then
                Dim d As New SetTextCallback(AddressOf SetText)
                Me.Invoke(d, New Object() {[text]})
            Else
                Me.TextBox1.AppendText([text])
            End If


        Catch ex As Exception
            MessageBox.Show(ex.Message, AppErrorTitle, MessageBoxButtons.OK, MessageBoxIcon.Error)
           'Return
        End Try

    End Sub



Затем в моем коде потока, который был вызван из моей основной формы, код потока выглядит следующим образом:

Dim fileEntries As String() = IO.Directory.GetFiles(TargetDirectory, WildCards)
           ' Process the list of files found in the directory.

        
           For z = 0 To fileEntries.Count - 1

           
               If ShowingDetailedLog = True Then
                   DetailedLog.SetText("Checking File:" & fileEntries(z) & vbNewLine)
               End If

Next



Мой код InvokeRequired всегда возвращает значение false, даже если форма открыта. Когда я "заставляю" его через отладку и шагаю в истинный раздел кода, он падает вместе с ним.
Invoke or BeginInvoke cannot be called on a control until the window handle has been created.



Любая помощь в этом вопросе была бы очень признательна, сводя меня с ума! Спасибо! :)

Что я уже пробовал:

Я делал различные поиски и пробовал примеры, и хотя примеры работают, я не могу реализовать их в своем проекте.

0 Ответов