Как я могу сделать этот фоновый рабочий отчет о прогрессе на основе запроса MySQL SELECT?
Ты не можешь. Это одна из проблем синхронного вызова метода, которая не позволяет заранее предсказать, сколько времени это займет. У вас есть две точки отсечения времени, чтобы иметь дело с. Прежде чем вызывать метод, а после вызывать метод. Вы не получаете ничего промежуточного. Либо метод вернулся, либо нет.
Вы можете использовать статистику в своих интересах, хотя. Вы можете записывать, сколько времени занимает каждый раз, когда он выполняется, сохранять его и использовать для расчета прогноза, но он никогда не будет точным. С таким прогнозом вы можете соответствующим образом распределить отчеты о прогрессе, чтобы в итоге вы получили 100% при статистическом прогнозе или около него, который вы рассчитали.
Однако, если база данных работает медленнее или быстрее, чем обычно, она будет отключена.
Также обратите внимание, что какой-либо поток, который вызывает MySQL для извлечения данных, не может быть тем же потоком, который сообщает о прогрессе, поскольку он будет «ожидать» базу данных MySQL и код .NET, который обращается к нему, чтобы вернуться с данные, все в одном куске. Вам нужно раскрутить еще одну ветку, которая сообщает о прогрессе.