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();
}
我知道应该在某个地方杀死线程,但在哪里以及如何杀死?
您的代码存在几个问题。
- 您正在工作线程中访问 UI,这是不合法的。
- 每次触发时都会创建新线程
TextChanged
并且忘记了之前创建的线程。 - 您使用了错误的数据结构。
- 等
如果您使用正确的工具,那么您根本不需要线程。应使用 Trie 数据结构来搜索以预期字符串开头的项目。
请参阅我的相关答案 此处 C# 实现相同的。