2014-06-14 2 views
0

콘솔에서 Listbox1으로 텍스트를 한 줄씩 전달하려고하는데 숨겨진 콘솔이 출력을 내 ListBox로 스트리밍합니다. 하지만 Cross-thread operation not validCMD 콘솔에서 VB ListBox로 스트리밍 출력

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 

답변

2

는 UI와 다른 스레드에서 BackgroundWorker 실행의 DoWork 이벤트를 얻고있다. 항목이 UI 스레드에 추가되고 있는지 확인해야합니다. 이를 수행하려면 예 : Invoke을 사용하십시오. 또한 MSDN에

Do 
    Dim line As String = std_out.ReadLine() 
    ListBox1.Invoke(Sub() ListBox1.Items.Add(line)) 
Loop While proc.HasExited = False 

상세 정보 :

Do ... Loop While 다음에 변경