Метод повторного вызова С#

Не совсем уверен, как это сделать или если это даже правильный способ программирования С#. Возможно, мне нужно переосмыслить то, что я пытаюсь сделать, но мне нужна помощь.

У меня есть приложение 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();
 }
1 ответ

Почему бы вам не while(!opener.exitProgram) некоторое while(!opener.exitProgram) на всю вашу реализацию Wait? Таким образом, вы вернетесь к началу, как только труба будет закрыта.

licensed under cc by-sa 3.0 with attribution.