我在教自己使用管道,我有兩個應用程序,一個使用PipeServer類,另一個使用PipeClient類(如下所示)。服務器應用程序創建PipeServer的一個實例,並有一個文本框,當文本框更改時調用WriteMessage方法。客戶端應用程序創建PipeClient實例,將MessageReadEvent設置爲使用給定消息填充文本框的方法,然後調用ReadMessages方法。如何繼續從命名管道/流發送/讀取消息
第一次調用ReadMessages方法時,它會到達sr.ReadLine()並等待,直到收到消息。收到消息後,對sr.ReadLine()的下一次調用自然返回null,並繼續退出該方法。
在這一點上,任何進一步的ReadMessages調用都會給我一個異常,說明管道已關閉。我不確定我明白爲什麼管道關閉。我如何保持開放?當然,我不必爲每條我想發送的消息創建一個管道的新實例?
下面是我的PipeClient類。我可以加我PipeServer類太多,如果這將是有益的,但我認爲這個問題是位於這裏...
public delegate void MessageReadEventHandler(string message);
class PipeClient: IDisposable
{
public event MessageReadEventHandler MessageReadEvent;
NamedPipeClientStream _pipeClient;
public PipeClient(string pipeName)
{
_pipeClient = new NamedPipeClientStream(".", pipeName, PipeDirection.In);
_pipeClient.Connect();
}
public void ReadMessages()
{
string temp;
// Is _pipeClient getting disposed when sr gets disposed??
// I wouldn't think so but I don't understand why I can't seem
// to use it again after the following using statement is run
using (StreamReader sr = new StreamReader(_pipeClient))
while ((temp = sr.ReadLine()) != null)
if(MessageReadEvent != null)
MessageReadEvent(temp);
}
public void Dispose()
{
_pipeClient.Dispose();
}
}
此回答一個問題導致另一個。如果有其他人在這裏找到方法,請訪問:http://www.benday.com/2008/06/22/playing-with-nets-named-pipe-streams-with-net-to-net-and- win32-to-net-samples /#comment-284瞭解瞭如何做到這一點的完整示例,該示例遠遠優於Microsoft提供的內容。 – 2012-02-27 03:12:43