【发布时间】:2011-09-13 18:48:00
【问题描述】:
我是那些偶然的程序员之一,所以我没有太多关于编程最佳实践的知识。
我有一个当前使用 4 个后台工作器的应用程序。
所以我声明它们:
private BackgroundWorker bw1;
private BackgroundWorker bw2;
private BackgroundWorker bw3;
private BackgroundWorker bw4;
然后配置它们:
bw1 = new BackgroundWorker();
bw1.WorkerReportsProgress = true;
bw1.DoWork += new DoWorkEventHandler(bw1_DoWork);
bw1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw1_RunWorkerCompleted);
bw1.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw2 = new BackgroundWorker();
bw2.WorkerReportsProgress = true;
bw2.DoWork += new DoWorkEventHandler(bw2_DoWork);
bw2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw2_RunWorkerCompleted);
bw2.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw3 = new BackgroundWorker();
bw3.WorkerReportsProgress = true;
bw3.DoWork += new DoWorkEventHandler(bw3_DoWork);
bw3.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw3_RunWorkerCompleted);
bw3.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw4 = new BackgroundWorker();
bw4.WorkerReportsProgress = true;
bw4.DoWork += new DoWorkEventHandler(bw4_DoWork);
bw4.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw4_RunWorkerCompleted);
bw4.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
然后我使用 bw1.RunWorkerAsync()、bw2.RunWorkerAsync() 等等...
问题是我从不同时调用它们,它们以非常线性的方式在不同点调用。
所以我的问题是,是拥有许多“预配置”后台工作人员更好还是拥有一个并根据我想要的方式更改 DoWork 和 RunWorkerCompleted 事件?
【问题讨论】:
-
如果您确实使用多个后台工作人员,您应该将它们放在
List<BackgroundWorker>中以防止冗余代码。那样的话,再多加十个,就不用加十倍的代码量了。 -
@DevinBurke:我不确定
backgroundWorkers[4]之类的内容是否比updateOrdersBackgroundWorker之类的内容更具描述性。这里的字段可能是带有名称的示例,但至少字段允许您为您拥有的东西命名。
标签: c# backgroundworker