我有一个用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)
{ }
答案 0 :(得分:4)
尝试在“例外”对话框中启用“在抛出异常时中断”(在VS.Net / Debug \ Exceptions ...菜单选项中按Ctrl + Alt + E)。这会在抛出异常时破坏调试器 - 这几乎肯定是你在这里得到的。