Часть кода функции не выполняется - PullRequest
0 голосов
/ 18 сентября 2010

У меня есть программа 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)
        { }

1 Ответ

4 голосов
/ 18 сентября 2010

Попробуйте запустить с параметром «Разорвать при возникновении исключения» в диалоговом окне «Исключения» (Ctrl + Alt + E в пункте меню VS.Net / Debug \ Exceptions ...). Это должно сломать отладчик, когда выдается исключение - это почти наверняка то, что вы получаете здесь.

...