使用 Process 多线程ping 和 outputdatareceived Invoke 的问题

coolfree 2017-06-28 02:08:14
思路是在 form 上画了 5个 textbox,点击按钮后同时ping 5个 ip,其返回值分别显示在5个textbox中,现在测试单个线程都无法显示,贴上部分代码,请各位指正
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim myProcess As New Process()
myProcess.StartInfo.FileName = "ping.exe"
myProcess.StartInfo.UseShellExecute = False
myProcess.StartInfo.Arguments = "192.168.5.10"
'在一个隐藏窗口中启动过程
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
myProcess.StartInfo.CreateNoWindow = True

myProcess.StartInfo.RedirectStandardOutput = True
AddHandler myProcess.OutputDataReceived, AddressOf OutputHandler
myProcess.Start()
myProcess.BeginOutputReadLine()
myProcess.WaitForExit()
myProcess.Close()

End Sub
Sub OutputHandler(sender As Object, e As DataReceivedEventArgs)
If Not String.IsNullOrEmpty(e.Data) Then
Dim mystr As String
mystr = e.Data
ShowRecieveData(mystr)
End If
End Sub
Private Sub ShowRecieveData(ByVal mystr As String)
If Me.TextBox1.InvokeRequired Then

Me.Invoke(New wt(AddressOf ShowRecieveData1), mystr.ToString)
Else
TextBox1.Text = mystr.ToString
End If
End Sub
Private Sub ShowRecieveData1(ByVal mystr As String)
TextBox1.Text = mystr.ToString
End Sub
...全文
270 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你如何调试的?贴出来画面。
coolfree 2017-06-28
  • 打赏
  • 举报
回复

能够正常中断,各参数正常
然后在 ShowRecieveData 中设置的断点也会中断,判断需要invoke,执行到
Me.Invoke(New wt(AddressOf ShowRecieveData1), mystr.ToString) 后,程序没有显示
coolfree 2017-06-28
  • 打赏
  • 举报
回复
首先在 OutputHandler 中设断
coolfree 2017-06-28
  • 打赏
  • 举报
回复

就是这样,点击按钮后,似乎进程锁死,没有任何显示,单步调试,执行到
Me.Invoke(New wt(AddressOf ShowRecieveData1), mystr.ToString)后
类似程序跑飞

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧