Как более эффективно читать из консоли консоль события? - PullRequest
0 голосов
/ 26 июня 2018

Простой код консоли, который читает консоль под названием ShellStream,

private ShellStream Shell;

public TelnetConnection(string Hostname, int Port, string MySSHHost, string MySSHRootUser, string MySSHRootUserPassword)
       {   
               SshConnection(MySSHHost, MySSHRootUser, MySSHRootUserPassword);            
               shell.DataReceived += new EventHandler<ShellDataEventArgs>(shell_DataReceived);   /// Created a event

       }

Итак, событие создается ниже

private void shell_DataReceived( object sender, ShellDataEventArgs e)
       {
           ScbyteReceived = e.Data;
           string result = Encoding.UTF8.GetString(e.Data, 0, e.Data.Count());
           ConsoleRead = result; <---------------------here
           Console.WriteLine(result);
       }

Теперь я хочу читать из события в реальном времени, поэтому я создаю строковую переменную "ConsoleRead" и передаю ей "результат"

затем в другой функции я начал читать из консоли, как показано ниже

public string ReadWithTimeOut(int Tout)
   {
       long  mycount = 0;
       if (!sshClient.IsConnected) return null;
       StringBuilder sb = new StringBuilder();
       do
       {
           //ParseTelnet(sb);
           sb.Append(ConsoleRead);    /// <-----------------here
           System.Threading.Thread.Sleep(TimeOutMs);
           mycount += TimeOutMs;
       } while (mycount < (long) Tout);
       return sb.ToString();
   }

Я знаю, что это не правильный путь. Не могли бы вы, ребята, предложить мне лучший способ чтения из консоли оболочки в режиме реального времени и передачи его в метод ReadWithTimeOut (). обратите внимание, я вызываю метод ReadWithTimeOut только при необходимости со временем.

1 Ответ

0 голосов
/ 27 июня 2018

Хорошо, это решение, которое я нашел, и все, что вам нужно сделать, это использовать Shell.read () вместо строки "ConsoleRead". нет необходимости создавать события оболочки (в моем случае). надеюсь, это поможет кому-то в будущем.

 do
       {  
           //sb.Append(ConsoleRead);    /// <-----------------here
           sb.Append(shell.Read());    // use this instead to read directly, more efficient than previous method
           System.Threading.Thread.Sleep(TimeOutMs);
           mycount += TimeOutMs;
       } while (mycount < (long) Tout);
         return sb.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...