我有一個IPC問題。我創建成一個窗口服務NamedPipeServer:IPC windows服務窗體
serverPipe = new NamedPipeServerStream(Constants.PIPE_NAME, PipeDirection.InOut, 1, PipeTransmissionMode.Message, PipeOptions.Asynchronous);
Thread thread = new Thread(new ThreadStart(pipeWork));
thread.Start();
,其中管道是
private static void pipeWork()
{
try
{
byte[] buffer = new byte[1024];
while (true)
{
if (!serverPipe.IsConnected)
serverPipe.WaitForConnection();
int nr = serverPipe.Read(buffer, 0, buffer.Length);
String str=Encoding.Default.GetString(buffer);
…
}
}
catch (Exception ex)
{
}
}
,併爲Windows窗體我有客戶
clientPipe = new NamedPipeClientStream(".", PhotoServiceClassLibrary.Constants.PIPE_NAME, PipeDirection.InOut,PipeOptions.Asynchronous);
clientPipe.Connect();
clientPipe.ReadMode = PipeTransmissionMode.Message;
pipeThread=new Thread(new ThreadStart(pipeWork));
pipeThread.Start();
,其中管道是
private void pipeWork()
{
try
{
while (true)
{
using (StreamReader sr = new StreamReader(clientPipe))
{
string message;
while ((message = sr.ReadLine()) != null)
{
…
}
}
}
}
catch (Exception ex)
{
}
}
I wan噸當服務開始動作以從窗戶形式禁用的ContextMenuStrip,對於該服務將消息寫入到一個StreamWriter SW:
StreamWriter write = null;
write = new StreamWriter(serverPipe);
if (serverPipe.IsConnected)
{
write.Write(message);
write.Flush();
}
的代碼是正確的,因爲我測試它實現了另一個窗口的形式創建同樣的東西,如Windows服務和 窗口管道服務器之間的通信 - >窗體管道客戶端工作正常。 問題是,Windows窗體 - 客戶端管道沒有收到來自Windows服務 - 服務器管道的消息。
我知道WCF可以是一個更好的主意,但我想了解爲什麼不在低級IPC工作。爲什麼?我看到一個非常奇怪的行爲。我的服務與Windows窗體交互2次: 1.我的服務專爲下載一些照片而設計。當他開始下載時,他會發送一條消息給windows窗體來宣佈他。 2.當我停止服務時,他發送消息給窗體窗體,他也停下來。 我剛剛發現這兩條消息都是在服務停止後纔到達windows代理的。有人能解釋爲什麼嗎?
沒有,是不是我真正的代碼。我的真實代碼是: 嘗試{ [...] } catch(例外ex) { throw ex; } – user61652 2009-06-06 21:45:17