#vb.net #visual-studio-2010 #visual-studio
#vb.net #visual-studio-2010 #visual-studio
Вопрос:
Я пытаюсь передать текст из консоли в Listbox1
строку за строкой, чтобы скрытая консоль передавала его вывод в мой список. Но я получаю Cross-thread operation not valid
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim start_info As New ProcessStartInfo()
start_info.FileName = ("cmd.exe")
start_info.UseShellExecute = False
start_info.CreateNoWindow = False
start_info.RedirectStandardOutput = True
start_info.WindowStyle = ProcessWindowStyle.Hidden
start_info.Arguments = ("ipconfig")
Dim proc As New Process
proc.StartInfo = start_info
proc.Start()
Dim std_out As System.IO.StreamReader
std_out = proc.StandardOutput
Do
ListBox1.Items.Add(std_out.ReadLine)
Loop While proc.HasExited = False
End Sub
Ответ №1:
DoWork
Событие BackgroundWorker
выполняется в потоке, отличном от пользовательского интерфейса. Вам нужно будет убедиться, что элементы добавляются в поток пользовательского интерфейса. Invoke
Для этого используйте, например.
Измените свой Do ... Loop While
на следующий:
Do
Dim line As String = std_out.ReadLine()
ListBox1.Invoke(Sub() ListBox1.Items.Add(line))
Loop While proc.HasExited = False
Дополнительная информация также о MSDN: