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.
Любая помощь в этом вопросе была бы очень признательна, сводя меня с ума! Спасибо! :)
Что я уже пробовал:
Я делал различные поиски и пробовал примеры, и хотя примеры работают, я не могу реализовать их в своем проекте.