C#中的多线程无法启动

时间:2014-11-24 11:29:00

标签: c# multithreading

在我的Windows窗体应用程序中,我有一个方法,从SortedDictionary搜索包含大约150,000个单词的搜索框中输入的文本,然后将结果添加到列表框中。在我的searchBox_TextChanged事件处理程序中,我正在创建一个新线程并启动它但根本不起作用。在单线程版本中,我的应用程序正在运行,但有点慢。我希望搜索更快。

private void searchAllWords()
{
    if (searchBox.Text.Length > 0)
    {
        var match = allWords.Keys.Where(x => x.StartsWith(searchBox.Text.Trim().ToLower())).ToArray();
        listBoxWords1.Items.AddRange(match);                
    }
}

private void searchBox_TextChanged(object sender, EventArgs e)
{
    listBoxWords1.Items.Clear();
    Thread searchThread = new Thread(new ThreadStart (searchAllWords));
    searchThread.Start();            
}        

我知道线程应该被杀死但是在哪里和如何?

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

  • 您正在访问工作线程中的UI,这是不合法的。
  • 每次TextChanged触发并忘记之前创建的线程时,都会创建新线程。
  • 您使用的是错误的数据结构。

如果使用正确的工具,则根本不需要线程。您应该使用Trie数据结构来搜索以期望字符串开头的项目。

请参阅我的相关答案here,了解相同的C#实现。