2012-02-28 9 views
0

これをどうやって行うのか、それともC#をプログラムする正しい方法であるかはわかりません。たぶん、私がやろうとしていることを再考する必要があるかもしれませんが、私はいくつかの助けが必要です。C#reinvoke current method

サービスを開始/停止するwpfアプリケーションがあります。また、名前付きパイプを使用してポートを開き、サービスと通信します。だからサービスが必要なときには、アプリにメッセージを送ることができます。私はnamedPipeServerStream.WaitForConnection()にあるWait()メソッドを呼び出すための新しいスレッドを開始しました。これはうまくいきますが、サービスが停止しているときに、アプリケーションにメッセージを送信して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(); 
    } 

答えて

0

をWaitの実装全体に配置しないのはなぜですか?そうすれば、パイプが閉じられると最初に戻ります。

+0

ハハ、簡単でした。ありがとう! – Ron