加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读