在没有Application.Idle的情况下在C#Windows窗体应用程序中检测空闲时间

时间:2010-06-10 11:51:05

标签: c# windows winforms timer idle-processing

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

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

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

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

听起来这是个好主意吗?

1 个答案:

答案 0 :(得分:4)

如果花费太长时间,你应该在自己的线程中开始处理。一旦获得新输入,您就可以停止先前的计算并再次从新信息开始(因此请考虑为您的线程取消机制)。

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

这只有在没有写入GUI的情况下可以进行一定量的计算时才有效...我不确定你是否可以这样实现它。这取决于你的计算类型。