我有一些做東西的類,通常是遍歷一個記錄集併爲每條記錄調用一個或兩個webservice。倒立的後臺工作人員
目前這一切都在GUI線程中運行並掛起繪畫。首先想到的是使用BackgroundWorker並實現一個很好的進度條,處理錯誤,完成等。後臺工作者所能夠做的所有好事。
只要代碼碰到屏幕就開始聞起來。我正在爲每個類寫入很多後臺工作,在bw_DoWork方法中重複大部分ProcessRows方法,並認爲應該有更好的方法,並且可能已經完成了。
在我繼續前進並重新開始之前,有沒有一種類型的模式或實現來分離出後臺工作者?它需要實現諸如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();
}
我會繼續前進,這樣做,但不要不想重塑。
我正在尋找將沿着「是的,喬做了很好的實施是(在這裏)」或線「這是一個代理的Widget模式,去了解它(這裏)」
也許會添加一個小的(簡化的)示例? –
在本例中,添加了UnlockCalls,可以使用SQL語句獲取多達1000行,使用webservice解鎖每一個,並返回它處理的行數。 我也想實現/使用pushToBackground類中的cancel和progress功能。 –