0

我有一个用 C# 构建的 WPF 程序,它的部分功能是填充两个 ListBox 控件。在 Window_Loaded 事件中,程序调用 Update() 函数以填充 ListBox,但它只执行部分函数。如果我在对文件进行追加后调用该函数,该函数甚至会崩溃。该文件的结构如下:

content_for_first_listbox content_for_second_listbox

函数更新如下:

private void UpdateURL()
{
    StreamReader rdr = new StreamReader("Links.db");
    string line;
    int dummy;
    URL.Clear();
    TAGS.Clear();
    while ((line = rdr.ReadLine()) != null)
    {
        dummy = line.IndexOf(' ');
        URL.Add(line.Substring(0, dummy));
        TAGS.Add(line.Substring(dummy + 1));
    }
    rdr.Close();
    LLinks.Items.Clear();
    LTags.Items.Clear();
    for (int a = 0; a < URL.Count; a++)
    {
        LLinks.Items.Add(new ListBoxItem().Content = URL[a]);
        LTags.Items.Add(new ListBoxItem().Content = TAGS[a]);
    }
}

它在第一个循环后停止执行,我从调试中发现了这一点。这是附加功能

private void LBookmarkBT_Click(object sender, RoutedEventArgs e)
{
    StreamWriter wrt = new StreamWriter("Links.db", true);
    wrt.Write("\n" + LURLTBox.Text + " " + LTagsTBox.Text);
    wrt.Close();
    UpdateURL();
}

有任何想法吗 ?

更新:问题是它正在读取所有行并正确解析它们,但是它会突然读取一个换行符,行字符串变为“”,因此 dummy = -1 并且它抛出了一个长度异常。我设法通过将循环放在 try-catch 块中并丢弃异常来克服这个问题,一切正常,但如果我可以这么说的话,它似乎有点“脏”。我应该怎么办 ?也许并且 if(dummy == -1) 不解析该行?

        try
        {
            while ((line = rdr.ReadLine()) != null)
            {
                dummy = line.IndexOf(' ');
                URL.Add(line.Substring(0, dummy));
                TAGS.Add(line.Substring(dummy + 1));
            }
        }
        catch (Exception e)
        { }
4

1 回答 1

4

尝试在“异常”对话框(VS.Net / Debug\Exceptions... 菜单选项中的 Ctrl+Alt+E 中)启用“抛出异常时中断”运行。当抛出异常时,这应该会破坏调试器 - 这几乎肯定是你在这里得到的。

于 2010-09-18T04:03:05.913 回答