我寫了一些使用命名管道將字符串從一個應用程序發送到另一個應用程序的代碼。它一次正常工作,但當客戶端嘗試第二次發送到服務器應用程序時,它會在嘗試連接到客戶端時凍結。在向NamedPipeServerStream發送請求後命名管道應用程序被凍結
服務器代碼是這樣的:
static void StartServer()
{
Task.Factory.StartNew(() =>
{
var server = new NamedPipeServerStream("MyPipe");
server.WaitForConnection();
StreamReader reader = new StreamReader(server);
while (true)
{
var line = reader.ReadLine();
if (line != null)
{
System.Windows.Forms.MessageBox.Show("Data: : " + line);
}
}
});
}
的客戶端代碼:
private void Test()
{
using (var client = new NamedPipeClientStream("MyPipe"))
{
client.Connect();
StreamWriter writer = new StreamWriter(client);
writer.WriteLine("INCOMING:1234567");
writer.Flush();
client.Dispose();
}
}
通過跟蹤代碼,我可以看到服務器代碼迴路連續的任何線被檢查閱讀但沒有找到任何。當Test()
方法被再次調用時,客戶端掛在client.Connect()
調用上。沒有例外。
任何人都可以看到我要去哪裏錯了嗎?
感謝您的答覆,我會看到關於重新寫它的第一種方式。 – GrandMasterFlush 2013-04-30 12:58:41