【发布时间】:2018-06-26 11:17:34
【问题描述】:
一个简单的控制台代码,用于读取名为 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();
}
我知道这不是正确的方法。你们能否建议我一种更好的方法来实时从 shell 控制台读取并将其传递给 ReadWithTimeOut() 方法。请注意,我仅在需要时才调用 ReadWithTimeOut 方法。
【问题讨论】:
-
好吧,公平地说,您的 readwithtimeout 并没有真正进行读取,它只是检查是否有读取..这看起来不像是 Id 这样做的方式,但有时需要必须并且我从未使用过 shellstream所以我不能说有更好的方法,但听起来确实应该有
-
你从控制台读取的另一种方式是什么?
-
我使用的是 chillkat 产品,但是,听起来您确实需要缓冲数据,然后在计时器之后进行处理
-
@BugFinder 嗨,我已经发布了我认为合适的答案。如果你也有同样的想法,请接受。谢谢
-
我不能接受,这不是我的问题