2010-09-18 19 views
0

J'ai un programme WPF construit en C#, et une partie de sa fonction est de remplir deux contrôles ListBox. À l'événement Window_Loaded le programme appelle la fonction Update() afin de remplir les ListBoxes, mais il n'exécute qu'une partie de la fonction. Et si j'appelle la fonction après qu'un append a été ajouté au fichier, la fonction va même tomber en panne. Le fichier est structuré comme suit:Une partie du code de fonction ne s'exécute pas

content_for_first_listbox content_for_second_listbox

La mise à jour de la fonction est la suivante:

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]); 
    } 
} 

Il arrête l'exécution après la première boucle, je trouve que hors de débogage . Et voici la fonction d'ajout

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(); 
} 

Des idées? Mise à jour: Le problème est qu'il lisait toutes les lignes et les analysait correctement, mais alors il lisait un retour à la ligne de nulle part, la chaîne de ligne devenait "" et donc dummy = -1 et il lançait une exception de longueur . J'ai réussi à surmonter cela en mettant la boucle dans un bloc try-catch et en rejetant l'exception, et tout fonctionne bien, mais il semble un peu «sale» si je peux le dire. Que devrais-je faire ? Peut-être et si (dummy == -1) ne pas analyser la ligne?

 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

avez-vous fait un pas dans votre code? J'allais dire que peut-être vous avez un problème avec le \ n à l'avant, et peut-être que ReadLine vous donne une ligne vide qui n'est pas analysée correctement. – Dave

+0

Des idées, quelqu'un? – Andrew

Répondre

4

Essayez de lancer avec "Break lorsqu'une exception est levée" activée dans la boîte de dialogue Exceptions (Ctrl + Alt + E dans VS.Net/Debug \ Exceptions ... option de menu). Cela devrait casser le débogueur lorsqu'une exception est lancée - ce qui est presque certainement ce que vous obtenez ici.

+0

Cela m'a beaucoup aidé dans le débogage, merci. – Andrew