С# задержка кода и, возможно, отмена выполнения, прокрутка DataGridView

Это мой первый ТАК вопрос, поэтому, пожалуйста, направьте меня, если я допустил какие-либо ошибки.

Я новичок в программировании на C# и занимаюсь самообучением. Мне удалось найти много информации, похожей на мою проблему (задержка кода), но я не могу найти/извлечь решение для моей конкретной проблемы. Я пытался искать, но, возможно, с неправильными ключевыми словами... Кроме того, несмотря на повторное чтение и поиск, иногда ответы слишком сложные, чтобы я мог их различить; возможно, я прочитал свое решение, но не понял этого.

Вот моя установка и последующая проблема:

У меня есть DataGridView, который отображает данные из базы данных SQL Server, доступ к которым будет осуществляться через Интернет (в данный момент я разрабатываю/тестирую по локальной сети). Когда пользователь выбирает новую строку в DGV, остальная часть формы заполняется информацией на основе этой записи, и этот процесс происходит достаточно быстро.

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

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

Ответы, которые я нашел до сих пор, похоже, эффективно устанавливают код «бомба замедленного действия», которая всегда будет выполняться после указанной задержки. Мне нужно отложить мой код, но затем выполнять его только в том случае, если пользователь все еще находится в той же строке, что и при инициации задержки.

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

Я уверен, что я не первый человек, столкнувшийся с этой проблемой — наверняка есть какой-то передовой подход к использованию DGV и его использованию для этой цели? Однако поиск SO для «кода задержки прокрутки c# datagridview» или «c# datagridview selectionchanged delay» не дает результатов, а другие поиски оказались безрезультатными.

Детали, которые могут быть необходимы или запрошены:

  • Это приложение C# Windows Forms.
  • Я использую Visual Studio 2012.
  • Код, обновляющий форму, находится в блоке кода события SelectionChanged DGV.

person elmer007    schedule 04.01.2016    source источник
comment
Я предлагаю вам проверить дроссель из реактивной среды С# или проверить этот пост: using-rx-framework" title="как снизить скорость события без использования rx framework"> stackoverflow.com/questions/21400514/   -  person Florim Maxhuni    schedule 05.01.2016
comment
Что плохого в использовании таймера? когда он достигает тайм-аута в 1 секунду, вы инициируете запрос данных или сбрасываете таймер и запускаете его снова.   -  person Sievajet    schedule 05.01.2016
comment
Можно ли прервать таймер? Например, если пользователь прокручивает вниз от строки 1 до строки 3, что происходит с таймером, запущенным при входе в строку 2 (и затем сразу же закрытом)? Можно ли использовать каждое событие SelectionChanged для сброса существующего таймера, а затем подождать, чтобы узнать, истекло ли соответствующее количество времени?   -  person elmer007    schedule 05.01.2016