C# 使用StreamReader逐行读取列表框中的项目

C# 使用StreamReader逐行读取列表框中的项目,c#,listbox,line,streamreader,readline,C#,Listbox,Line,Streamreader,Readline,我正在尝试制作一个可以逐行阅读的StreamReader,然后,每一行都会成为我列表框中的一个项目。。。目前,我的代码被销毁了。现在的问题是它只放文本文件的第一行。此外,如果我在代码开头删除以下代码,当我第二次加载它时,它会工作,但第一行有两次,一次在末尾,一次在开头: 行。清除() 这是: public void loadViewlist_But_Click(object sender, EventArgs e) { if (listBox1.DataSourc

我正在尝试制作一个可以逐行阅读的StreamReader,然后,每一行都会成为我列表框中的一个项目。。。目前,我的代码被销毁了。现在的问题是它只放文本文件的第一行。此外,如果我在代码开头删除以下代码,当我第二次加载它时,它会工作,但第一行有两次,一次在末尾,一次在开头:

行。清除()

这是:

    public void loadViewlist_But_Click(object sender, EventArgs e)
    {
        if (listBox1.DataSource == lines)
        {
            listBox1.DataSource = null;
            lines.Clear();
        }
        listBox1.Items.Clear();
        OpenFileDialog selectViewlist = new OpenFileDialog();
        selectViewlist.AddExtension = true;
        selectViewlist.Filter = "ImageViewerList Files|*.imlist";
        selectViewlist.FilterIndex = 1;
        selectViewlist.RestoreDirectory = true;

        if (selectViewlist.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {

            using (StreamReader viewListReader = new StreamReader(selectViewlist.FileName))
            {
                int counter = 0;
                string line;
                while ((line = viewListReader.ReadLine()) != null)
                {
                    lines.Add(line);
                    listBox1.DataSource = lines;
                    counter++;
                }
            }
        }
    }

如果有人能向我解释并帮助我,我将不胜感激。

在while循环之后执行“listBox1.DataSource=lines”,而不是在while循环中。最好在使用块之外进行。在您的示例中,当第一次将“行”分配给数据源时,它只包含一项。listbox将忽略连续的“listBox1.DataSource=lines”,因为它已经将“lines”作为数据源。此外,由于列表框仅在成功分配数据源时更新,因此对“行”的进一步直接操作不会导致列表框更新。@elgonzo好的,谢谢。@elgonzo非常感谢,它似乎正在工作。现在我明白了。非常感谢。