我正在开发一个实现SSH.Net库的C#程序。该程序的一个功能允许通过SSH将命令发送到目标服务器,然后在文本字段中显示输出。
这很好用,但是当输出响应很大时我遇到了问题。 目前显示所有输出直到完成。我需要一种方法,例如显示30行,然后等待用户输入,显示接下来的30行。
我可以使用for循环和计数器轻松停止30行的输出,但我不确定如何重新启动它,如何回到streamreader中的同一点?
var list = new List<string>();
string line;
output_textBox.Text = String.Empty;
while (!asynch.IsCompleted)
{
using (StreamReader sr = new StreamReader(cmd.OutputStream))
{
while ((line = sr.ReadLine()) != null)
{
list.Add(line);
Console.WriteLine(line);
}
}
}
由于
修改
使用以下内容。
using (StreamReader sr = new StreamReader(cmd.OutputStream))
{
while (!sr.EndOfStream)
{
while (line_count < 100 && (line = sr.ReadLine()) != null)
{
Console.SetOut(new TextBoxWriter(output_textBox));
Console.WriteLine(line);
line_count++;
}
MessageBox.Show("OK to continue");
line_count = 0;
}
答案 0 :(得分:1)
您似乎正在使用并行编程。您可以编写两个函数作为Producer&amp;消费者。例如,生产者将不断读取您的文本并将其放入内存列表中,并且消费者将以适当的时间间隔从列表中消费(并删除消费的行)。
答案 1 :(得分:1)
返回上次完成的行:
int startFrom = 30; // skip first 30 lines
using (StreamReader rdr = new StreamReader(fs))
{
// skip lines
for (int i = 0; i < startFrom ; i++) {
rdr.ReadLine();
}
// ... continue with processing file
}
<强>更新强>
public void Process() {
//init
int startFrom = 0;
int stepCount = 100;
//read data 0 - 100
ReadLines(startFrom, stepCount);
startFrom += stepCount;
// after user action
//read data 100 - 200
ReadLines(startFrom, stepCount);
}
public void ReadLines( int skipFirstNum, int readNum ) {
using (StreamReader rdr = new StreamReader(cmd.OutputStream)) {
// skip lines
for (int i = 0; i < skipFirstNum; i++) {
rdr.ReadLine();
}
for (int i = 0; i < readNum ; i++) {
// ... these are the lines to process
}
}
}