gpt4 book ai didi

C# 我应该创建一个后台 worker 还是多个?

转载 作者:IT王子 更新时间:2023-10-29 04:23:20 24 4
gpt4 key购买 nike

我是那些偶然的程序员之一,所以我对编程最佳实践的了解不多。

我有一个当前使用 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 事件更好?

最佳答案

通常我以完全不同的模式使用后台 worker 。我不是在一开始就一次性定义它们,包括它们各自的事件处理程序,而是在我做需要它们的事情时即时创建它们。

public void SomeEventHandlerMaybe(object sender, EventArgs e) {
// do something

var bw = new BackgroundWorker();
bw.ReportsProgress = true;
bw.DoWork += delegate {
// do work. You can use locals from here
};
bw.ProgressChanged += delegate { ... };
bw.RunWorkerCompleted += delegate {
// do something with the results.
};
bw.RunWorkerAsync();
}

类似的东西。这样做的好处是,您可以将所有与后台工作人员一起执行某些操作或在后台工作人员中执行某些操作的代码放在一个地方,而且顺序大致正确。

关于C# 我应该创建一个后台 worker 还是多个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7406895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com