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