В вашем случае идет постоянное обновление view, а это UI часть. То есть вынести в отдельный поток нельзя.
Что тут стоит сделать:
yourDataGridView.SuspendDrawing();
// обновление ваших полей
yourDataGridView.ResumeDrawing();
И мелкие улучшения:
var row = this.dataGridView2.Rows[i]; // чтобы меньше проверки на индекс дергать
row.Cells[0].Value = ...;
Можно бы и конструкции string.Format("{0:0.#############}"... в отдельный поток вынести и уже подготовленные данные внести в GridView