У меня есть несколько классов, которые делают вещи, обычно перебирают набор записей и вызывают веб-сервис или два для каждой записи.
На данный момент все это работает в потоке графического интерфейса и вешает рисование. Первой мыслью было использовать BackgroundWorker и реализовать красивый индикатор выполнения, обрабатывать ошибки, завершение и т. Д. Все приятные вещи, которые позволяет фоновый работник.
Как только код попал на экран, он начал пахнуть. Я писал много фонового работника в каждый класс, повторяя большую часть метода ProcessRows в методе bw_DoWork и думая, что должен быть лучший способ, и это, вероятно, уже сделано.
Прежде чем я продолжу изобретать колесо, есть ли шаблон или реализация для класса, который отделяет фонового работника? Для этого потребуются классы, которые реализуют интерфейс, такой как ibackgroundable, но классы все еще могут работать автономно, и для реализации интерфейса потребуются минимальные изменения.
Редактировать: упрощенный пример, запрошенный @Henk:
У меня есть:
private void buttonUnlockCalls_Click(object sender, EventArgs e)
{
UnlockCalls unlockCalls = new UnlockCalls();
unlockCalls.MaxRowsToProcess = 1000;
int processedRows = unlockCalls.ProcessRows();
this.textProcessedRows.text = processedRows.ToString();
}
Я думаю, что хочу:
private void buttonUnlockCalls_Click(object sender, EventArgs e)
{
UnlockCalls unlockCalls = new UnlockCalls();
unlockCalls.MaxRowsToProcess = 1000;
PushToBackground pushToBackground = new PushToBackground(unlockCalls)
pushToBackground.GetReturnValue = pushToBackground_GetReturnValue;
pushToBackground.DoWork();
}
private void pushToBackground_GetReturnValue(object sender, EventArgs e)
{
int processedRows = e.processedRows;
this.textProcessedRows.text = processedRows.ToString();
}
Я мог бы пойти дальше и сделать это, но не хочу изобретать заново.
Ответ, который я ищу, будет выглядеть следующим образом: «Да, Джо сделал хорошую реализацию этого (здесь)» или «Это шаблон прокси-виджета, прочитайте об этом (здесь)»