后台工作人员从不同的班级更新(最好通过活动)

Ale*_*xey 3 c# events backgroundworker winforms

我的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
}
Run Code Online (Sandbox Code Playgroud)

进口商是我自己的班级.现在,该AllocateTrades2方法已完成所有处理.

我的问题是,如何在不将bw作为参数传递的情况下在不同的类中执行方法bw.ProgressReport内部AllocateTrades2?

如果有人向我解释如何用事件做这件事,但是如果还有另一种优雅的方式,那会很棒.我很开心.

Ser*_*rvy 5

如果你不想传递整个BGW(理所当然地),以便不暴露超出它需要知道的内容,一个选择就是传入你分配ReportProgress呼叫的委托.

调整签名为AllocateTrades2:

public List<TradeUploadInfo> AllocateTrades2(
    Importer importer, bool flag, Action<int> reportProgress)
Run Code Online (Sandbox Code Playgroud)

reportProgress从该方法中适当地调用委托.

然后调整调用,AllocateTrades2如下所示:

obj.AllocateTrades2(tradeImporter, false,
     progress => worker.ReportProgress(progress));
Run Code Online (Sandbox Code Playgroud)

  • @Alexey对,你需要一个`Action`,相应编辑. (2认同)