【问题标题】:C# Reading line by line from file to listboxC#逐行读取文件到列表框
【发布时间】:2014-01-28 18:32:16
【问题描述】:

我在逐行读取文件中的文本时遇到问题。

System.IO.StreamReader file = new System.IO.StreamReader("ais.txt");
while ((line = file.ReadLine()) != null)
{
    listBox1.Items.Add(line);
}

此代码仅从文件中读取最后一行并显示在列表框中。如何逐行阅读?

例如:读取一行,等待 1 秒,读取另一行,等待 1 秒……等等?

【问题讨论】:

  • 你试过File.ReadAllLines()函数吗?
  • 我理解阅读每一行,但是这 1 秒的等待重要吗?为什么不把所有的行都读一遍呢?
  • 顺便说一句,除了不声明line,您的代码工作正常。
  • @JonB 是正确的......到底是什么问题?
  • " 等待 1 秒," 你到底为什么要这么做?

标签: c# readline line-by-line


【解决方案1】:

如果您想在延迟一秒的情况下一次读取一行,您可以在表单中添加一个计时器来执行此操作(将其设置为 1000):

System.IO.StreamReader file = new System.IO.StreamReader("ais.txt");
String line;
private void timer1_Tick(object sender, EventArgs e)
{
    if ((line = file.ReadLine()) != null)
    {
        listBox1.Items.Add(line);
    }
    else
    {
        timer1.Enabled = false;
        file.Close();
    }
}

您也可以一次阅读所有行,然后一次只显示一行,但我试图让这尽可能接近您的代码。

【讨论】:

  • 完成后关闭阅读器非常重要。
【解决方案2】:

await 使这变得非常容易。我们可以循环遍历所有行和await Task.Delay 以异步等待一段时间再继续,同时仍然不会阻塞 UI 线程。

public async Task DisplayLinesSlowly()
{
    foreach (var line in File.ReadLines("ais.txt"))
    {
        listBox1.Items.Add(line);
        await Task.Delay(1000);
    }
}

【讨论】:

    【解决方案3】:

    你试过File.ReadAllLines吗?你可以这样做:

    string[] lines = File.ReadAllLines(path);
    
    foreach(string line in lines)
    {
       listBox1.Items.Add(line);
    }
    

    【讨论】:

      【解决方案4】:

      您可以读取所有行并保存到数组字符串

        string[] file_lines = File.ReadAllLines("ais.txt");
      

      然后逐行读取按钮点击或使用计时器等待1秒

      【讨论】:

        猜你喜欢
        • 2014-06-21
        • 2012-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-11
        • 1970-01-01
        相关资源
        最近更新 更多