2

我有一个奇怪的问题,我不太确定如何修复或解决。我正在编写一个迷你文本编辑器风格的应用程序 - RichTextBox 编辑器。

在选择更改后,我需要进行一些复杂的解析——更新位置、选择文本和有关区域周围文本上下文的各种其他位。

由于需要一些处理,如果用户使用箭头键滚动,我不希望每次选择更改时都会触发它。我曾想过使用 Application.Idle,但它触发得太频繁了。我尝试了一个计时器,但它可能会在选择箭头仍在移动时触发。

我在想的是倒数计时器之类的实用程序,它会在每次触发 RichTextBox SelectionChanged 事件时重置计时器,然后当计时器达到 500 毫秒或 1000 毫秒时,它将执行复杂的处理运行。

这听起来是个好主意吗?

4

1 回答 1

4

当处理时间太长时,您可能应该在自己的线程中开始处理。一旦获得新的输入,您就可以停止先前的计算并重新开始使用新信息(因此请考虑线程的取消机制)。

当你的线程完成后,你必须检查它的结果是否有效(同时选择没有改变)。最后,您可以将计算结果“同步”到 GUI,希望足够快 :)

这仅在无需写入 GUI 即可完成一定数量的计算时才有效……我不确定您是否可以通过这种方式实现它。这取决于您的计算类型。

于 2010-06-10T12:02:50.547 回答