因此,我的程序從計算「XProcess」的多少個進程開始,並有一個定時器每隔1秒檢查一次,這很好用!我有輸入設置變量的計數。然後我有一個子例程,它接受該設置變量以及一個IF語句來輸出TCPClient正在發送字符串(「One Process」)。VB.NET TCPClient /服務器問題 - 在定時器上發送
那麼問題是,我沒有事件用於子例程,所以我把它與計時器綁定,每隔1秒發送一次消息。 TCPClient現在將它發送到本地地址(127.0.0.1),並將其發送到文本框。那麼問題!
它重複(「一個進程」)一遍又一遍,我可以看到爲什麼會發生這種情況。
所以在下面的代碼中,TCPClient如何向TCPServer和TCPSERVER發送「XProcess」有多少進程吐出一個或多個進程正在運行的通知?(服務器不斷重複字符串(整數運行如此)一遍又一遍)
下面的工作,但重複有多少進程作爲字符串運行。
MainWindow.xaml.vb
Imports System.Windows.Threading
Imports System.Net.Sockets
Public Class MainWindow
Private Run_ProgramRunCheck_timer As New DispatcherTimer
Private Run_RecieveCheck_timer As New DispatcherTimer
Dim processCount As Integer
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
ServerStart()
'Check for program changes every second
' Set interval for timer
Run_ProgramRunCheck_timer.Interval = TimeSpan.FromMilliseconds(1000)
'Start timer on button click
Run_ProgramRunCheck_timer.Start()
AddHandler Run_ProgramRunCheck_timer.Tick, AddressOf __ProgramCheck
'Check for Message Recieve every second
' Set interval for timer
Run_RecieveCheck_timer.Interval = TimeSpan.FromMilliseconds(1000)
'Start timer on button click
Run_RecieveCheck_timer.Start()
AddHandler Run_RecieveCheck_timer.Tick, AddressOf _RecieveMessageConvert
TCPClientSender()
End Sub
Public Sub __ProgramCheck()
'This sub will be checked every 1 seconds for changes
'Count number of processes
processCount = Process.GetProcessesByName("tvnviewer").Count()
My.Settings.TotalProcesses = processCount
End Sub
Public Sub TCPClientSender()
My.Settings.TotalProcesses = 0
If My.Settings.TotalProcesses = 1 Then
Dim port As Int32 = 50000
Dim client As New TcpClient("127.0.0.1", port)
' Translate the passed message into ASCII and store it as a Byte array.
Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes("One Process")
' Get a client stream for reading and writing.
' Stream stream = client.GetStream();
Dim stream As NetworkStream = client.GetStream()
' Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length)
End If
End Sub
Public Sub _RecieveMessageConvert()
TextBlock1.Text = My.Settings.StoreSentMessage
End Sub
End Class
TCPServer.vb
Imports System.Net
Imports System.Threading
Imports System.Net.Sockets
Imports System.IO
Public Module TCPServer
Dim Server = New TcpListener(IPAddress.Any, 50000) ' <-- Listen on Port 50,000
Dim Client As New TcpClient
Private ServerThread As Thread = Nothing
Dim Message As String = ""
Private Threads As New List(Of Thread)
Public Sub ServerStart()
ServerThread = New Thread(AddressOf ConnectionListener)
ServerThread.IsBackground = True
ServerThread.Start()
End Sub
Private Sub ConnectionListener()
Try
Server.Start()
While True
Dim client As TcpClient = Server.AcceptTcpClient ' Blocks until Connection Request is Received
Dim Reader As New StreamReader(client.GetStream())
While Reader.Peek > -1
Message = Message + Convert.ToChar(Reader.Read()).ToString
End While
My.Settings.StoreSentMessage = Message
End While
Catch ex As Exception
End Try
End Sub
End Module
注意:「XPROCESS」表示任何過程。是的,我有tvnviewer作爲進程,但進程名稱並不重要。 –
你的代碼有點混亂,你的指示不太清楚。你能解釋一下兩個計時器有什麼作用嗎?您正在啓動第一個計時器(填充.TotalProcesses),然後執行更多代碼並調用另一個計時器(填充TextBlock1.Text)。只要沒有任何一個.Stop()方法(儘管在邏輯上不執行上述中間操作),兩個定時器都會保持運行(每秒一次)。你能詳細闡述一下你想要的東西嗎? – varocarbas