2010-06-10 62 views
2

我有一个奇怪的问题,我不太确定如何修复或解决问题。我正在编写一个迷你文本编辑器风格的应用程序 - RichTextBox编辑器。在没有Application.Idle的情况下在C#Windows窗体应用程序中检测空闲时间

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

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

我想的是一个倒数计时器排序实用程序的,将每次的RichTextBox SelectionChanged事件触发,那么当计时器命中500   ms或1000  毫秒它将执行复杂处理的运行复位定时器。

这听起来像个好主意吗?

+0

你什么时候需要做这个处理?什么时候被选择或者甚至当光标位置改变时(SelectionLength == 0)? – tanascius 2010-06-10 11:54:54

回答

4

如果时间太长,您应该从自己的线程开始处理。只要你得到新的输入,你可以停止以前的计算,并再次从新的信息开始(所以考虑你的线程取消机制)。

当你的线程完成后,你必须检查它的结果是否有效(在此期间selecion没有改变)。最后,您可以将计算结果“同步”到GUI,该GUI有足够快的速度:)

只有在没有写入GUI的情况下才能完成一定的计算量时,这才起作用。 ..我不确定你是否可以这样实施它。这取决于您的计算类型。

+1

不,没什么用处,可以在该线程中完成。它无法访问RTB的任何属性。 – 2010-06-10 12:57:18

+0

@Hans ...这就是为什么我写道它取决于计算的类型...做例如拼写检查可以在一个线程中完成......当然,在错误的单词上着色必须在外面完成 – tanascius 2010-06-10 13:14:37

相关问题