C # повторно вызвать текущий метод - PullRequest
0 голосов
/ 28 февраля 2012

Не совсем уверен, как это сделать, или даже если это правильный способ программирования на 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();
    }

1 Ответ

0 голосов
/ 28 февраля 2012

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

...