C# Чтение построчно из файла в список

У меня проблема с чтением текста из файла построчно.

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

Этот код читает только последнюю строку из файла и отображается в списке. Как я могу читать построчно?

Например: прочитать строку, подождать 1 секунду, прочитать другую строку, подождать 1 секунду... и т. Д.?

4 ответа

await делает это очень легко Мы можем просто пройтись по всем линиям и await Task.Delay для асинхронного ожидания в течение определенного периода времени, прежде чем продолжить, при этом все еще не блокируя поток пользовательского интерфейса.

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

Если вы хотите читать строки по одной с задержкой в ​​одну секунду, вы можете добавить в форму таймер, чтобы сделать это (установите его на 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();
    }
}

Вы также можете читать строки сразу и просто отображать их по одной, но я старался максимально приблизить их к вашему коду.

Вы пробовали File.ReadAllLines? Вы можете сделать что-то вроде этого:

string[] lines = File.ReadAllLines(path);

foreach(string line in lines)
{
   listBox1.Items.Add(line);
}

Вы можете прочитать все строки и сохранить в строку массива

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

а затем читать построчно нажатием кнопки или использовать таймер, чтобы подождать 1 секунду

Другие вопросы по тегам