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?
如果有人向我解释如何用事件做这件事,但是如果还有另一种优雅的方式,那会很棒.我很开心.
如果你不想传递整个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)