Вы могли бы сделать это, хотя я не понимаю, для чего это будет полезно в простых случаях. Поскольку вы уже в бизнес-методе BackgroundWorker
, нет смысла использовать еще больше потоков, создав еще один BackgroundWorker
, и вы можете выполнить ту же самую работу на линии.
Если вы все еще хотите иметь вторую BackgroundWorker
, вы можете передавать события с измененным прогрессом от второго рабочего к первому, прикрепив обработчик к событию ProgressChanged
второго рабочего. Затем этот обработчик вызовет событие ProgressChanged
для первого работника, распространяя новости.
Например:
private void ComplianceWorker_DoWork(object sender, DoWorkEventArgs e)
{
var CCC = new ComplianceControlCenter(/* ... */);
// Assume that CCC exposes a BackgroundWorker, but read below
var worker = CCC.Worker; // "second" worker
worker.ProgressChanged += this.PropagateProgressChanged;
CCC.start();
}
private void PropagateProgressChanged(object sender, ProgressChangedEventArgs e)
{
var worker = this.worker; // "first" worker
worker.ReportProgress(e.ProgressPercentage, e.UserState);
}
Этот код присоединяет обработчик событий ко «второму» работнику с
var worker = CCC.Worker; // "second" worker
worker.ProgressChanged += this.PropagateProgressChanged;
, который предполагает, что ComplianceControlCenter
выставляет свой собственный BackgroundWorker
напрямую. Поскольку это может быть не так, вы можете изменить отношение, передав вместо этого ссылку на this.PropagateProgressChanged
в конструктор и разрешив ему присоединить обработчик событий для вас.