Использование .NET 4, wpf C#, я передаю значения возвращаемых методов и параметры между двумя процессами.Inter-process communication sample-server & client C#
Поскольку мне нужно, чтобы соединение было открытым и активным все время, я изо всех сил старался свести к минимуму повторяющийся код (внутри цикла), но если бы я не поставил весь этот код внутри цикла, это не получилось (после первая передача подключения к серверу была закрыта), так как он здесь, он работает многократно.
Мне было интересно сначала, как это должно быть закодировано, весь процесс, включая новый экземпляр, располагать, закрывать ... внутри цикла?
Является единственным доступным типом данных для межпроцессной связи, передаваемой как строка (неэффективная)?
public void client()
{
for (int i = 0; i < 2; i++)
{
System.IO.Pipes.NamedPipeClientStream pipeClient =
new System.IO.Pipes.NamedPipeClientStream(".", "testpipe",
System.IO.Pipes.PipeDirection.InOut, System.IO.Pipes.PipeOptions.None);
if (pipeClient.IsConnected != true)
{
pipeClient.Connect(550);
}
System.IO.StreamReader sr = new System.IO.StreamReader(pipeClient);
System.IO.StreamWriter sw = new System.IO.StreamWriter(pipeClient);
string status;
status = sr.ReadLine();
if (status == "Waiting")
{
try
{
sw.WriteLine("param1fileName.cs,33" + i);
sw.Flush();
pipeClient.Close();
}
catch (Exception ex) { throw ex; }
}
}
}
public string server()
{
NamedPipeServerStream pipeServer = null;
do
{
try
{
pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut, 4);
StreamReader sr = new StreamReader(pipeServer);
StreamWriter sw = new StreamWriter(pipeServer);
System.Threading.Thread.Sleep(100);
pipeServer.WaitForConnection();
string test;
sw.WriteLine("Waiting");
sw.Flush();
pipeServer.WaitForPipeDrain();
test = sr.ReadLine();
if (!string.IsNullOrEmpty(test))
try
{
System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => MbxTw.Show(Convert.ToInt32(test.Split(',')[1]), test.Split(',')[0], "method()", "Warning!! - " + "content")), System.Windows.Threading.DispatcherPriority.Normal);
}
catch (Exception e)
{
}
}
catch (Exception ex) {
throw ex; }
finally
{
pipeServer.WaitForPipeDrain();
if (pipeServer.IsConnected) { pipeServer.Disconnect(); }
}
} while (true);
}
Нет на все вопросы, но это не полезно вообще. Прочитайте [ask] и задайте лучший вопрос. – Amit
Доступный тип данных _only_ для IPC - _byte_. Эти байты могут представлять все, что вы хотите, но поток в потоке только отправляет/принимает байты. См. «BitConverter» для вспомогательных методов обработки других типов данных. Кажется, что в вашем сообщении не существует фактического утверждения _problem. Если у вас есть рабочий код, кто-то не может сказать вам, как его исправить. Если вам нужно что-то исправить, предоставьте хороший [mcve], который надежно воспроизведет проблему, а также четкое описание проблемы. –
@PeterDuniho спасибо за ваше время и детство! , он все еще в самом начале, но не могли бы вы кратко проверить мой ответ? –