在' x'之后C#暂停streamreader输出行数然后继续

时间:2015-09-02 08:56:59

标签: c# loops ssh streamreader

我正在开发一个实现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; 
                    }

2 个答案:

答案 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
        }
    }
}