如何在不冻结屏幕的情况下验证RichTextBox中的大文本?

时间:2017-10-19 13:38:32

标签: c# wpf multithreading async-await nhunspell

我目前正在使用NHunspell在WPF中实施自定义拼写检查,因为.Net Framework的原生解决方案并不适合我的需求。但是我在检查大文本中的单词时遇到了麻烦,例如带有10个pargraph的Lorem Ipsum,因为我需要检查每个单词,看看它是否包含在Hunspell使用的字典中,如果没有,我需要强调那个词。

我有这个当前的方法,每当KeyUp是退格键或空格键时检查所有文本。

ctype

但是,我认为我需要一个异步解决方案,因此它不会阻止我的主线程和用户输入。 - 理论上我考虑运行一个并行线程,如果用户在没有输入的情况下花费超过2秒,然后将选中的TextRange返回到我的RichTextBox(SpellCheckRichTextBox)。

有人可以建议任何解决方案,以便在处理大文本时我可以减慢验证速度吗?我真的坚持这一点,任何帮助都会受到赞赏。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

第一项改进将是

zzz.AsParallel().Where(x => _viewModel.MisspelledWords.Contains(x)).ToList();

这显然假设您的.MisspelledWords.Contains(x)可以并行完成的事情。它可能已经是ConcurrentDictionary

拥有拼写错误的单词集合的事实让我相信你已经解析了一次文本。那么为什么要解析两次呢?为什么不能将这些与通行证相结合?这将是另一种可能的优化。

是的,当用户停止输入时,在另一个线程中执行所有这些操作会更好。