У меня есть программа WPF, встроенная в C #, и частью ее функции является заполнение двух элементов управления ListBox. При событии Window_Loaded программа вызывает функцию Update () для заполнения списков, но выполняет только часть функции. И если я вызову функцию после добавления в файл, функция даже завершится сбоем. Файл имеет следующую структуру:
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)
{ }