@Nevea

Перенаправление new Process() OutputDataReceived в socket?

Добрый день, делаю клиент-серверное приложение
Клиент запускает программу и вывод команд перенаправляется на сервер через socket.
Process run = new Process();
                p.StartInfo.FileName = "cmd.exe"
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true; 
                DataReceivedEventHandler Fun= (o, e) => {
                     StringBuilder strOutput = new StringBuilder();
                    if (!String.IsNullOrEmpty(e.Data))
                    {      
                           try
                            {   
                            strOutput.Append('\n'+e.Data);        
                            }
                            catch (Exception e) { 
                                    socket.Send(Encoding.UTF8.GetBytes(e_aplication.ToString());
                            }
                            
                    }   
                    else {
                         socket.Send(Encoding.UTF8.GetBytes(strOutput.ToString())); 
                         strOutput.Clear();
                        
                    }       
                };
                p.OutputDataReceived += Fun;
                p.Start();
                p.BeginOutputReadLine();

Так вот данные успешно передаются, но иногда возникают ситуации что DataReceivedEventHandler вызывается несколько раз, и соответственно несколько раз вызывается socket.Send(); например если выполнить команду DIR Соответственно суть вопроса, как собрать все передаваемые данные в едино и потом отослать socket.Send(fulldata) ? Заранее извиняюсь за глупый вопрос, только начал изучать C#.
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 2
@d-stream
Готовые решения - не подаю, но...
Собственно так и сделать как написано:
собирать в буфер, а потом буфер засылать
Ответ написан
Комментировать
@Nevea Автор вопроса
это не корректно работает, DataReceivedEventHandler Fun может выполняться, как отследить что вывод информации p.OutputDataReceived += Fun; закончен полностью?
в документации написано
OutputDataReceivedСобытие указывает, что связанная Process строка записала строку, заканчивающуюся символом новой строки (возврат каретки (CR), перевод строки (LF) или CR + LF) в перенаправленный StandardOutput поток.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы