Не совсем уверен, как это сделать, или даже если это правильный способ программирования на C #. Может быть, мне нужно переосмыслить то, что я пытаюсь сделать, но мне нужна помощь.
У меня есть приложение wpf, которое запускает / останавливает службу, а также использует именованный канал для открытия порта и связи со службой. Поэтому, когда сервису необходимо, он может отправить сообщение в приложение. Я запустил новый поток для вызова метода Wait (), который находится по адресу namedPipeServerStream.WaitForConnection (). Это работает нормально, но когда служба остановлена, я отправляю сообщение приложению, чтобы оно сломало WaitForConnection, однако я не хочу убивать этот поток, я хочу повторно вызвать тот же метод и ждать в цикле, пока служба не запустится снова. Не уверен, что лучший способ сделать это.
Код, который у меня есть, находится ниже.
void Wait()
{
while (!ServiceControl.ServiceRunning)
{
Thread.Sleep(250);
if (exitProgram == true)
{
break;
}
}
while (ServiceControl.ServiceRunning)
{
try
{
NamedPipeServerStream namedPipeServerStream = new NamedPipeServerStream("pipeName");
namedPipeServerStream.WaitForConnection();
byte[] buffer = new byte[255];
namedPipeServerStream.Read(buffer, 0, 255);
string request = ASCIIEncoding.ASCII.GetString(buffer);
if (request != null)
{
if (request == "pipeExit")
{
Wait(); //Reinvoke Wait if svc calls to exit
}
else
{
//Do work on message
}
}
namedPipeServerStream.Close();
}
catch (Exception){}
}
if (_opener.exitProgram == true)
{
Application.Current.Dispatcher.InvokeShutdown();
}