在Window_Loaded WPF C#中跳过了代码

时间:2015-11-10 18:17:58

标签: c# wpf

由于某种原因,我的一些代码似乎被跳过而没有抛出错误。 我正在为学校编写一个程序,它使用一个组合框与圣经中的每个单词,在圣经中搜索单击的单词并将包含该单词的每个单词输出到列表框中。 被跳过的代码是forloop和输出。 (apperantly) 更多信息: Wordsinthebible.length =约33000 圣经中的经文。长度=约24000

以下是相关代码:

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        //Read bible
        bible = File.ReadAllText("../../LUTHER.TXT", Encoding.UTF7);
        VersesInTheBible = File.ReadAllLines("../../LUTHER.TXT", Encoding.UTF7);

        //"Suchwort" is just a class that saves a string(the word) and a string array(the verses)
        WordsToSearch = new List<Suchwort>();

        //Split bible in to words
        WordsInTheBible = new List<string>(GetWords(bible).Distinct());
        WordsInTheBible.Sort();

        //Fill list with word and verses
        for (int i = 0; i < WordsInTheBible.Count; i++)
        {
            WordsToSearch.Add(new Suchwort(WordsInTheBible[i], GetVerses(WordsInTheBible[i])));
        }

        //Give combobox Words to search by
        cbx_wörter.ItemsSource = WordsToSearch;
    }

    public string[] GetVerses(string wort)
    {
        List<string> Verse = new List<string>();
        for (int i = 0; i < VersesInTheBible.Length; i++)
        {
            if (VersesInTheBible[i].Contains(wort))
            {
                Verse.Add(VersesInTheBible[i]);
            }
        }
        return Verse.ToArray();
    }

现在,当我运行程序时会发生什么事情,它不会崩溃或抛出任何异常,但我得到的只是一个空的组合框:

empty combobox

我是否通过所有的单词和经文循环太长时间或者这应该没问题?

1 个答案:

答案 0 :(得分:1)

  

但我得到的只是一个空的组合框:

这是因为该程序在GUI Thread上加载了24,000个组合框,并且由于GUI正在经历巨大的性能损失,所以从未看到任何项目。

标准建议仅在后台线程/流程中进行劳动密集型工作,并在完成后将项目提供给ViewModel属性,该属性通过InotifyPropertyChange准备显示数据。当进程正在运行时,使用WPF BusyIndicator提醒用户执行长时间运行的过程。

坦率地说,没有人会使用24000字下拉。这是不可行的。我建议你放入一个带有按钮的编辑框来启动搜索。当用户按下按钮时,根据TextBox数据提供要选择的可管理项目列表。

如果MVVM是新的,请查看我的博客文章Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding,以帮助您入门。