private void btnGenerateStats_Click(object sender, EventArgs e)
{
//...
dgvReadWrites.DataSource = dtJobReadWrite;
// etc...
}
Это проблема, вы обновляете dtJobReadWrite в BGW. Это приводит к тому, что связанная сетка обновляется рабочим потоком. Недопустимо, элементы управления не являются потокобезопасными и могут обновляться только из потока, который их создал. Обычно это проверяется, создавая InvalidOperationException во время отладки, но эта проверка не работает для связанных элементов управления.
Что происходит дальше, повсюду, вам повезло, что вы получили очень повторяемый тупик. Более распространенное неправильное поведение - случайные рисования артефактов и тупик, только когда вы не находитесь рядом. Исправлено:
dgvReadWrites.DataSource = null;
и повторное связывание сетки в обработчике событий RunWorkerCompleted, как вы уже делаете.