微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 后台工作者从不同的类更新(最好通过事件)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐