Im пытается установить именованное соединение между серверным программным обеспечением и клиентом.Именованные каналы Сервер выходит без предупреждения
Это мой код сервера:
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;
}
}
}
}
Но когда я пытаюсь запустить это приложение, он выходит сразу после старта.
Я использовал отладчик, чтобы добраться до линии WaitForConnection
, а затем он выходит без ошибки или исключения. И ничего не работает, кроме сервера.
Он уходит, не получая обработанную часть. Я что-то пропустил?
Я знаю, что выполнение будет заблокировано нормально. Но в этом случае вся программа завершает работу. – Snickbrack
@Snickbrack Ahh в порядке, приличия. Я думал, вы имели в виду, говоря: «И ничего не работает, кроме сервера», что он продолжал работать, но не пошел дальше кода. Я посмотрю поближе и вернусь к вам. –
@Snickbrack Проблема заключается в том, как вы вызываете свое действие. Когда вы вызываете BeginInvoke, он вызывается асинхронно, в потоке threadpool. Поэтому вам нужно проверить, закончилось ли действие или нет, основной поток продолжает работать и доходит до конца. Я обновил свой ответ о том, как вы можете сделать это очень легко –