C# 中的多线程处理不会启动

本文关键字:启动 多线程处理 | 更新日期: 2023-09-27 18:31:38

在我的Windows表单应用程序中,我有一个方法,可以从包含大约150,000个单词的SortedDictionary中搜索在搜索框中输入的文本,然后将结果添加到列表框中。在我的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();            
}        

我知道应该在某个地方杀死线程,但在哪里以及如何杀死?

C# 中的多线程处理不会启动

您的代码存在几个问题。

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

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

请参阅我的相关答案 此处 C# 实现相同的。