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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...