私は2つのプログラムを書いています
- 最初のプログラムは、テキスト メッセージを 2 番目のプログラムに送信します。
- 2 番目のプログラムは、すべてのメッセージを指定されたファイルに書き込みます。2 番目のプログラムが終了したら、最初のプログラムに閉じるか終了することを通知する必要があります。
2 番目のプログラムが起動していない場合、ユーザーは最初のプログラムからメッセージを送信できません。ユーザーが 2 番目のプログラムを再度開いた場合、最初のプログラムはメッセージの送信を許可する必要があります。最初のプログラムが起動または終了していない場合、2 番目のプログラムも自動的に終了する必要があります。
コードを書き込もうとしましたが、すべてのシナリオを取得できません。このコードでは、テキストを送信し、テキストをファイルに保存できます。その後、私はできません
最初のプログラムコードはここにあります:
public void ThreadStartClient(object obj)
{
ManualResetEvent syncServer = (ManualResetEvent)obj;
using (NamedPipeClientStream pipeStream = new NamedPipeClientStream("PipeTo"))
{
pipeStream.Connect();
Console.WriteLine("[First program] Pipe Connection established");
using (StreamWriter sw = new StreamWriter(pipeStream))
{
sw.AutoFlush = true;
string message;
Console.WriteLine("Please type a message and press [ENTER], or type 'quit' to exit the program");
while ((message = Console.ReadLine()) != null)
{
if (message == "quit")
{
break;
}
try
{
sw.WriteLine(message);
}
catch (Exception ex)
{
// pipeStream.Connect();
}
}
}
}
}
2 番目のプログラム コードは次のとおりです。
public void ThreadStartServer()
{
using (NamedPipeServerStream pipeStream = new NamedPipeServerStream("PipeTo"))
{
Console.WriteLine("[Second program] Pipe Created");
pipeStream.WaitForConnection();
Console.WriteLine("[Second program] Pipe connection established");
StreamWriter sw1 = new StreamWriter("C:\\ServerEXE\\DemoTest.txt", true);
using (StreamReader sr = new StreamReader(pipeStream))
{
string message;
while ((message = sr.ReadLine()) != null)
{
sw1.WriteLine(message);
sw1.Flush();
Console.WriteLine("{0}", message);
}
}
}
Console.WriteLine("Connection lost");
}