以下是我写的通讯那块程序,是PC机与PLC之间的通讯,PLC的地址为192.168.0.1,通讯端口为4000,目的是将sendTxtBox里面的内容发送到PLC,再将PLC接收到的内容返回到receiveTxtBox,调试得时候出现得问题是在sendTxtBox里面输入发送字符后,点击“Button1”根本没有反应啊,本来不想贴这么多程序的,大家看了也头疼,实在没办法了啊,被领导批得不行了,求救大家,谢谢了Imports System.Windows.Forms
Imports System.Threading
Imports System.Net.Sockets
Imports System.Net
Imports System.IOPublic Class CommunicationFrm Delegate Sub SetTextCallback(ByVal s As String) Private output As NetworkStream Private writer As BinaryWriter
Private reader As BinaryReader Private message As String = ""
Private readThread As Thread Public Sub New()
MyBase.New() ' 此调用是 Windows 窗体设计器所必需的。
InitializeComponent() ' 在 InitializeComponent() 调用之后添加任何初始化。 readThread = New Thread(New ThreadStart(AddressOf RunClient))
readThread.Start() End Sub Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Try
writer.Write(sendTxtBox.Text)
Catch exception As SocketException MessageBox.Show("Error writing object") End Try End Sub Public Sub RunClient() Dim client As TcpClient Try client = New TcpClient()
client.Connect("192.168.0.1", 4000) output = client.GetStream writer = New BinaryWriter(output)
reader = New BinaryReader(output)
MessageBox.Show("网络已建立") Try Do
message = reader.ReadString
settext(vbCrLf & message) Loop While message <> "" Catch inputoutputexception As IOException
MessageBox.Show("Client application closing")
Finally settext(vbCrLf & "Closing connection." & vbCrLf)
writer.Close()
reader.Close()
output.Close()
client.Close() End Try Catch ex As Exception
MessageBox.Show("网络连接未建立")
End Try
End Sub Private Sub settext(ByVal s As String) If receiveTxtBox.InvokeRequired Then Dim d As New SetTextCallback(AddressOf settext)
Me.Invoke(d, New Object() {s})
Else
Me.receiveTxtBox.Text &= s
End If End Sub
End Class
Imports System.Threading
Imports System.Net.Sockets
Imports System.Net
Imports System.IOPublic Class CommunicationFrm Delegate Sub SetTextCallback(ByVal s As String) Private output As NetworkStream Private writer As BinaryWriter
Private reader As BinaryReader Private message As String = ""
Private readThread As Thread Public Sub New()
MyBase.New() ' 此调用是 Windows 窗体设计器所必需的。
InitializeComponent() ' 在 InitializeComponent() 调用之后添加任何初始化。 readThread = New Thread(New ThreadStart(AddressOf RunClient))
readThread.Start() End Sub Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Try
writer.Write(sendTxtBox.Text)
Catch exception As SocketException MessageBox.Show("Error writing object") End Try End Sub Public Sub RunClient() Dim client As TcpClient Try client = New TcpClient()
client.Connect("192.168.0.1", 4000) output = client.GetStream writer = New BinaryWriter(output)
reader = New BinaryReader(output)
MessageBox.Show("网络已建立") Try Do
message = reader.ReadString
settext(vbCrLf & message) Loop While message <> "" Catch inputoutputexception As IOException
MessageBox.Show("Client application closing")
Finally settext(vbCrLf & "Closing connection." & vbCrLf)
writer.Close()
reader.Close()
output.Close()
client.Close() End Try Catch ex As Exception
MessageBox.Show("网络连接未建立")
End Try
End Sub Private Sub settext(ByVal s As String) If receiveTxtBox.InvokeRequired Then Dim d As New SetTextCallback(AddressOf settext)
Me.Invoke(d, New Object() {s})
Else
Me.receiveTxtBox.Text &= s
End If End Sub
End Class
Do
message = reader.ReadString
settext(vbCrLf & message) Loop While message <> ""
改成
while true
message = reader.ReadString
settext(vbCrLf & message)
End While
线程里调用的方法起作用了么?