【发布时间】:2013-10-15 03:01:33
【问题描述】:
所以我的程序从计算“XProcess”的进程数开始,并有一个计时器每 1 秒检查一次,效果很好!我将计数输入到设置变量中。然后我有一个子例程,它采用该设置变量,以及一个 IF 语句来输出 TCPClient 正在发送字符串(“一个进程”)。
问题是,我没有事件可用于子例程,因此我将其与计时器绑定,以每 1 秒发送一次消息。 TCPClient 立即将其发送到本地地址(127.0.0.1),并将其发送到文本框。好问题!!!
它一遍又一遍地重复(“一个过程”),我可以理解为什么会发生这种情况。
那么使用下面的代码,TCPClient 如何向 TCPServer 和 TCPSERVER 发送“XProcess”的多少进程的通知以吐出 1 个或多个进程正在运行?(与输出服务器一遍又一遍地重复字符串(整数也可以)
下面的工作,但重复有多少进程作为字符串运行。
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() 方法(尽管从逻辑上讲,没有执行上述中间操作),这两个计时器都可能保持运行(每秒一次)。你能详细说明一下你到底想要什么吗?
标签: vb.net timer tcpclient tcplistener