2010-09-18 27 views
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塊並拋棄異常來克服這一點,並且一切正常,但如果我可以這樣說的話,它似乎有點「髒」。我該怎麼辦 ?也許,如果(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

你單步執行了你的代碼嗎?我會說,也許你在前面遇到了\ n問題,也許ReadLine會給你一個空白的行,不能正確解析。 – Dave 2010-09-18 04:04:52

+0

任何想法,任何人? – Andrew 2010-09-18 08:09:56

回答

4

嘗試在例外對話框(按Ctrl + Alt + E在VS.Net /調試\例外...菜單選項)啓用「時拋出一個異常中斷」運行。當拋出異常時這應該會中斷調試器 - 這幾乎可以肯定你在這裏得到的。

+0

它在調試中幫了很大的忙,謝謝。 – Andrew 2010-09-18 05:40:25