Один из способов состоит в том, чтобы основной поток создал BlockingCollection<string>
, который служит в качестве очереди, в которую фоновый поток может добавлять строки.Когда фоновый поток завершает добавление, он вызывает CompleteAdding
.
Поток пользовательского интерфейса также создает таймер, который срабатывает с некоторой частотой (вероятно, которую вы определили экспериментально).Событие таймера Elapsed
проверяет, есть ли что-нибудь в очереди, и, если это так, удаляет один элемент и добавляет его в DataGridView
.Когда событие таймера Elapsed
видит, что свойство очереди IsComplete
равно True
, оно останавливается и удаляет таймер.
Если ваш таймер не работает слишком быстро, это должно сохранить ваш пользовательский интерфейсотзывчивый, и вам не нужно возиться с добавлением задержек в фоновый поток.