我的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));

10-04 13:03