У меня есть 2 приложения, над которыми я работаю - одно из них - это служба windows, которая выполняет фоновые задачи и вызывает API-запросы et c. Второй - это приложение для форм, которое запускается в контексте пользователя. Назначение приложения форм - отображать данные пользователю по мере необходимости, когда это требуется службой windows.
Чтобы включить обмен данными между двумя приложениями, я использовал потоки и сокеты. Я не делал этого раньше, поэтому, пожалуйста, go полегче, если я допустил какие-либо вопиющие ошибки. Код в обоих приложениях выглядит примерно следующим образом, за исключением номера порта, который отличается для каждого ...
Imports System.Net.Sockets
Imports System.Threading
Public Listener As New TcpListener(64420)
Public Client As New TcpClient
Public Message As String = ""
Public Function StartListener()
Try
Dim ListenerThread As New Thread(New ThreadStart(AddressOf StartListener))
ListenerThread.Start()
Listener.Start()
Timer1.Start()
Catch ex As Exception
End Try
End Function
Public Function MessageClient(ByVal Message As String)
Try
Client = New TcpClient("127.0.0.1", 64421)
Dim Writer As New StreamWriter(Client.GetStream())
Writer.Write(Message)
Writer.Flush()
Return "OK"
Catch ex As Exception
Return "Error"
End Try
End Function
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Listener.Pending = True Then
Message = ""
Client = Listener.AcceptTcpClient()
Dim Reader As New StreamReader(Client.GetStream())
While Reader.Peek > -1
Message = Message + Convert.ToChar(Reader.Read()).ToString
End While
ResponseCalc(Message)
End If
End Sub
Обмен данными между двумя приложениями работает отлично, и в обоих случаях передается «сообщение». на функцию ResponseCal c, которая определяет, что нужно сделать на обоих концах.
Проблема в том, что с тех пор, как я вставил это, оба моих приложения используют безумное количество ЦП. До такой степени, что я постоянно выключаю свою машину на 100% ЦП.
Есть ли способ достичь того же результата без соответствующего сумасшедшего использования ЦП?
Или в противном случае, Как еще вы могли go включить связь между такими приложениями?
Первоначально я думал о записи / чтении файлов на диск и с диска, но не хотел этого делать, так как это было неряшливо и непрофессионально .
Приветствуем любую помощь!