我的GUI班有一名后台工作者。
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
ProgressClass obj = new ProgressClass();
Importer tradeImporter = e.Argument as Importer;
BackgroundWorker worker = sender as BackgroundWorker;
List<TradeUploadInfo> list = obj.AllocateTrades2(tradeImporter, false);
e.Result = list; //Passes the list for processing
}
进口商是我自己的班。现在,
AllocateTrades2
方法已完成所有处理。我的问题是,如何在
bw.ProgressReport
方法内执行AllocateTrades2
,该方法在另一个类中而不将bw作为参数传递?如果有人向我解释如何处理事件,那将是很好的选择,但是如果还有另一种优雅的方式。我愿意征求意见。
最佳答案
如果您不想传入整个BGW(合理地如此)以不暴露超出其所需知识的范围,则一种选择是仅传入您为其分配了ReportProgress
调用的委托。
将AllocateTrades2
的签名调整为:
public List<TradeUploadInfo> AllocateTrades2(
Importer importer, bool flag, Action<int> reportProgress)
从该方法中适当地调用
reportProgress
委托。然后像这样调整对
AllocateTrades2
的调用:obj.AllocateTrades2(tradeImporter, false,
progress => worker.ReportProgress(progress));