Обычно BackgroundWorker используется, когда вам необходимо RunWorkerCompleted для выполнения обновлений в графическом интерфейсе. По крайней мере, так я это использовал. Похоже, вы хотите, чтобы это работало постоянно, так почему бы не использовать обычный рабочий поток?
Самая большая проблема, которую я вижу, заключается в том, что BackgroundWorker использует пул потоков .NET, поэтому, если вы действительно хотите, чтобы это работало непрерывно, вы просто гарантированно используете один из потоков пула потоков, число которых ограничено. имеется.