Обнаружение простоя в приложении C # Windows Forms без Application.Idle - PullRequest
2 голосов
/ 10 июня 2010

У меня странная проблема, которую я не очень уверен, как исправить или решить.Я пишу приложение в стиле мини-текстового редактора - редактор RichTextBox.

Мне нужно выполнить сложный анализ после изменений выделения - обновить позицию, выделенный текст и различные другие сведения о контексте текста вокруг области..

Поскольку требуется немного обработки, я не хочу, чтобы он запускался каждый раз, когда изменяется выбор, если пользователь прокручивает свои клавиши со стрелками.Я думал об использовании Application.Idle, но оно срабатывает слишком регулярно.Я попробовал таймер, но он может сработать, пока стрелки выбора все еще движутся.

Я думал о утилите с таймером обратного отсчета, которая будет сбрасывать таймер каждый раз, когда срабатывает событие RichTextBox SelectionChanged, затем, когдатаймер достигает 500 мс или 1000 мс, он выполняет сложные запуски обработки.

Звучит ли это как хорошая идея?

1 Ответ

4 голосов
/ 10 июня 2010

Вероятно, вам следует начать обработку в собственном потоке , когда это занимает слишком много времени. Как только вы получите новые входные данные, вы можете остановить предыдущий расчет и снова начать с новой информации (поэтому рассмотрите механизм отмены для вашего потока).

Когда ваша тема закончена, вы должны проверить, верны ли ее результаты (выбор не изменился за это время). Наконец, вы можете «синхронизировать» результаты расчета с графическим интерфейсом, который, как мы надеемся, достаточно быстр:)

Это работает только тогда, когда есть определенный объем вычислений, который можно выполнить без записи в графический интерфейс ... Я не уверен, что вы сможете реализовать его таким образом. Это зависит от типа ваших расчетов.

...