Я уже несколько дней пытаюсь понять это и задаюсь вопросом, не хватает ли я чего-то простого или делаю совершенно неправильно.
Пример: Два файла - TestClass.vb, myForm.vb
TestClass.vb выглядит следующим образом:
Imports System.Threading
Public Class TestClass
Private myClassThread As New Thread(AddressOf StartMyClassThread)
Public Sub Start()
myClassThread.Start()
End Sub
Private Sub StartMyClassThread()
myForm.Msg("Testing Message")
End Sub
End Class
myForm.vb - это базовая форма с элементом управления списком и элементом управления-кнопкой, названные соответственно Output и StartButton. Код формы выглядит следующим образом:
Public Class myForm
Private classEntity As New TestClass
Private Sub StartButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles StartButton.Click
Msg("Start Button Pressed")
classEntity.Start()
End Sub
Delegate Sub MsgCallBack(ByVal mesg As String)
Public Sub Msg(ByVal mesg As String)
If Output.InvokeRequired Then
MsgBox("Invoked")
Dim d As New MsgCallBack(AddressOf Msg)
Invoke(d, New Object() {mesg})
Else
MsgBox("Not Invoked")
mesg.Trim()
Output.Items.Add(mesg)
End If
End Sub
End Class
Результат:
Приложение запускается, без ошибок или исключений. Отображается список и кнопка «Пуск». Я нажимаю кнопку «Пуск», и в окне сообщений появляется сообщение «Не запущено», как и ожидалось, и после нажатия кнопки «ОК» в это окно сообщения «Кнопка запуска нажата» добавляется в элемент управления списком вывода. Сразу после этого снова появляется msgbox с надписью «Not Invoked». Я ожидал, что "Invoked", поскольку отдельный поток пытается использовать элемент управления списком вывода. Конечно, это приводит к попытке выполнения Output.Items.Add, которая не приводит к видимому результату, поскольку потоку не разрешено напрямую обновлять элемент управления пользовательского интерфейса.
Я, должно быть, прочитал небольшую книгу с разными страницами, пытаясь тщательно изучить понимаю ямы и методы, но я чувствую, что, возможно, попал в ловушку, которую могут сделать многие люди. Файл csv изначально был файлом Excel, который я сохранил в формате .csv
Мы будем очень благодарны за любую помощь или предложения!