【发布时间】:2020-07-31 23:59:24
【问题描述】:
我是 C# 的新手,目前正在从事一个需要 BackgroundWorkers 的项目。我发现 BackgroundWorker RunWorkerAsync 只是将一个对象作为参数。但在某些情况下,我需要将多个对象传递给 RunWorkerAsync 方法。
我目前所做的是将所有对象加载到 List 中,然后将它们作为单个 List 对象传递,这工作得很好。但我的问题是,这可以做得更好或更漂亮吗?这种方法有什么问题吗?
List<object> data = new List<object>(3);
List.Add(object1);
List.Add(object2);
List.Add(object3);
bwImportData.RunWorkerAsync(data);
private void DoWork(object sender, DoWorkEventArgs e)
{
List<object> data = e.Arguments a List<object>
objecttype1 object1 = data[0] as objecttype1;
objecttype2 object2 = data[0] as objecttype2;
objecttype3 object2 = data[0] as objecttype3;
//Do stuff
}
private void RunWorker(object sender, RunWorkerCompletedEventArgs e)
{
//Do stuff stuff stuff
}
【问题讨论】:
-
将它们定义为私有属性,然后在启动 worker 之前分配值。您可以在
DoWork方法中访问这些属性中的值。 -
@KosalaW 他可以做到这一点,但这是一种错误的方法。当他可以简单地使用包装类作为参数时,他为什么要使用全局变量并在实例和工作逻辑之间建立依赖关系(这更干净)。
-
这取决于要求。包装类只是另一种方式。但是,如果您的表单中已经有这些属性,为什么不使用它们呢?大多数时候,您必须在多个地方使用这些属性。但是,如果您的表单中没有它们(这不太可能),那么可以创建一个专门作为参数传入的类。
标签: c# backgroundworker