0

C#にWPFプログラムが組み込まれていて、その関数の一部は2つのListBoxコントロールにデータを入力しています。Window_Loadedイベントで、プログラムはListBoxにデータを入力するためにUpdate()関数を呼び出しますが、関数の一部のみを実行します。また、ファイルに追加が行われた後に関数を呼び出すと、関数がクラッシュすることさえあります。ファイルは次のように構成されています。

content_for_first_listbox content_for_second_listbox

関数Updateは次のとおりです。

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

何か案は ?

更新:問題は、すべての行を読み取って正しく解析していましたが、どこからともなく改行を読み取るため、行文字列が ""になり、ダミー= -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)
        { }
4

1 に答える 1

4

[例外]ダイアログ(VS.NetのCtrl + Alt + E / Debug \ Exceptions ...メニューオプション)で[例外がスローされたときに中断する]を有効にして実行してみてください。これにより、例外がスローされたときにデバッガーが破損するはずです。これは、ほぼ確実に、ここで取得しているものです。

于 2010-09-18T04:03:05.913 に答える