c# – 后台工作者从不同的类更新(最好通过事件)
发布时间:2020-12-16 01:54:55 所属栏目:百科 来源:网络整理
导读:我的GUI类中有一个后台工作程序. private void bw_DoWork(object sender,DoWorkEventArgs e){ ProgressClass obj = new ProgressClass(); Importer tradeImporter = e.Argument as Importer; BackgroundWorker worker = sender as BackgroundWorker; ListTra
我的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方法已完成所有处理. 我的问题是,如何在AllocateTrades2方法中执行bw.ProgressReport,该方法在不同的类中,而不将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)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |