Ich versuche, eine Named Pipes-Verbindung zwischen einer Server-Software und einem Client einzurichten.Named Pipes Server wird ohne Warnung beendet
Dies ist mein Server-Code:
class Program
{
private static NamedPipeServerStream server = new NamedPipeServerStream("p", PipeDirection.InOut);
static void Main(string[] args)
{
Action<NamedPipeServerStream> a = callBack;
a.BeginInvoke(server, ar => { }, null);
}
private static void callBack(NamedPipeServerStream pipe)
{
pipe.WaitForConnection();
var line = "";
while (line != "exit")
{
try
{
StreamReader reader = new StreamReader(pipe);
while (line != "exit")
{
line = reader.ReadLine();
switch (line)
{
default:
foo();
break;
}
}
break;
}
catch (IOException)
{
pipe.Disconnect();
continue;
}
}
}
}
Aber wenn ich versuche, diese Anwendung auszuführen es direkt nach dem Start beendet.
Ich habe den Debugger verwendet, um die WaitForConnection
-Linie zu erreichen und dann wird es ohne einen Fehler oder eine Ausnahme beendet. Und es läuft nichts als der Server.
Es wird beendet, ohne vom Catch-Teil behandelt zu werden. Fehle ich etwas?
Ich weiß, dass die Ausführung normal blockiert wird. Aber in diesem Fall endet das ganze Programm. – Snickbrack
@Snickbrack Ahh okay, Entschuldigungen. Ich dachte, du meintest, indem du sagst "Und es läuft nichts außer dem Server", dass es weiter lief, aber nicht weiter in den Code ging. Ich werde genauer hinsehen und zu dir zurückgehen –
@Snickbrack Das Problem ist die Art, wie du deine Aktion aufrufst. Wenn Sie BeginInvoke aufrufen, wird es in einem Threadpool-Thread asynchron aufgerufen. Dazu müssen Sie überprüfen, ob die Aktion beendet ist oder nicht, ansonsten läuft der Haupt-Thread weiter und erreicht das Ende. Ich habe meine Antwort darauf aktualisiert, wie Sie das sehr leicht machen können –