C# 如何创建一个后台工作人员池?

C# 如何创建一个后台工作人员池?,c#,multithreading,backgroundworker,C#,Multithreading,Backgroundworker,我发现我很享受通过BackgroundWorkers异步运行代码的简单性。我通过示例或反复试验自学了它的用途、陷阱、安全线程等,而不是理论,也许还有我的致命弱点 我已经做了我的研究,但有一件事我没有找到太多的谈论,我如何才能有效地创建和使用一个后台工作人员池?或者,有什么比使用BWs更简单的方法呢 我将说明我遇到的问题: 我有一个任务X、Y和Z,每个任务都很密集,因此它会挂断UI线程。我认为BWs就是答案,即使这段代码只执行了一次。我学会了如何使用它们,一些安全的线程实践,然后继续我的旅程。很快

我发现我很享受通过BackgroundWorkers异步运行代码的简单性。我通过示例或反复试验自学了它的用途、陷阱、安全线程等,而不是理论,也许还有我的致命弱点

我已经做了我的研究,但有一件事我没有找到太多的谈论,我如何才能有效地创建和使用一个后台工作人员池?或者,有什么比使用BWs更简单的方法呢

我将说明我遇到的问题: 我有一个任务X、Y和Z,每个任务都很密集,因此它会挂断UI线程。我认为BWs就是答案,即使这段代码只执行了一次。我学会了如何使用它们,一些安全的线程实践,然后继续我的旅程。很快我的代码看起来像:BW1、BW2、BW3等等

然后我开始更加熟悉它们,并将代码放入BWs中,可用于硬件监控或其他无限循环/始终运行的项目。我还是遇到了一个BW5,BW6。。。。问题

通过在调用RunWorkerAsynchronous()之前设置一个全局字符串变量,我找到了创建多用途BackgroundWorker的创造性方法,然后我可以在BackgroundWorker中嵌套If/else或Switches,以根据我设置的字符串变量执行所需的代码。然而,我觉得我只是在自我学习的极限附近跳舞

那么,有谁能指导我创建一个线程池/bw,并在整个程序中根据需要使用它们,循环使用线程而不是显式创建每个线程,然后让几十个后台工作人员为特定的密集目的进行处理呢?


注意:我不是一个很好的程序员,所以我正在寻找简单的函数示例或解释。任何和所有的帮助,尽管是热切欢迎

你不需要把它们集中起来。它们在内部使用ThreadPool,ThreadPool已经是一个线程池


您不需要将它们集中在一起。它们在内部使用ThreadPool,ThreadPool已经是一个线程池


您不需要将它们集中在一起。它们在内部使用ThreadPool,ThreadPool已经是一个线程池


您不需要将它们集中在一起。它们在内部使用ThreadPool,ThreadPool已经是一个线程池


我强烈建议使用任务来实现您的目标。这将管理从线程池中选择线程、跨多个核心平衡线程等所有艰苦工作

如果您具有以下功能:

public void DoSomething()
{
    //things happen here
}
然后,您可以使用以下命令启动任务:

var task = Task.Factory.StartNew(DoSomething);


您可以在

上阅读更多内容。我强烈建议您使用任务来实现自己的目标。这将管理从线程池中选择线程、跨多个核心平衡线程等所有艰苦工作

如果您具有以下功能:

public void DoSomething()
{
    //things happen here
}
然后,您可以使用以下命令启动任务:

var task = Task.Factory.StartNew(DoSomething);


您可以在

上阅读更多内容。我强烈建议您使用任务来实现自己的目标。这将管理从线程池中选择线程、跨多个核心平衡线程等所有艰苦工作

如果您具有以下功能:

public void DoSomething()
{
    //things happen here
}
然后,您可以使用以下命令启动任务:

var task = Task.Factory.StartNew(DoSomething);


您可以在

上阅读更多内容。我强烈建议您使用任务来实现自己的目标。这将管理从线程池中选择线程、跨多个核心平衡线程等所有艰苦工作

如果您具有以下功能:

public void DoSomething()
{
    //things happen here
}
然后,您可以使用以下命令启动任务:

var task = Task.Factory.StartNew(DoSomething);



您可以在

上阅读更多内容。您是否查看了任务(TPL)和/或常规线程池?IIRC,如果你需要一个同步上下文来更新WPF或Winforms UI,backgroundworker是不错的,但它不是很灵活。你检查过这是.NET 2.0还是更高版本吗?谢谢大家,我会看看任务和线程池@fabigler.Net 4.5.1/.2您看过任务(TPL)和/或常规线程池吗?IIRC,如果你需要一个同步上下文来更新WPF或Winforms UI,backgroundworker是不错的,但它不是很灵活。你检查过这是.NET 2.0还是更高版本吗?谢谢大家,我会看看任务和线程池@fabigler.Net 4.5.1/.2您看过任务(TPL)和/或常规线程池吗?IIRC,如果你需要一个同步上下文来更新WPF或Winforms UI,backgroundworker是不错的,但它不是很灵活。你检查过这是.NET 2.0还是更高版本吗?谢谢大家,我会看看任务和线程池@fabigler.Net 4.5.1/.2您看过任务(TPL)和/或常规线程池吗?IIRC,如果你需要一个同步上下文来更新WPF或Winforms UI,backgroundworker是不错的,但它不是很灵活。你检查过这是.NET 2.0还是更高版本吗?谢谢大家,我会看看任务和线程池@fabigler.Net 4.5.1/.2我理解这一点,但是,BackgroundWorker在代码中是明确的。它永远不会放弃,有时是一次性的,有时不是。当一部分时间需要重复使用,而另一部分时间是“一次性的”时,我如何避免申报一打BW?我的想法告诉我创建一个HastTable/Array/BWs列表。。。但我认为可能有更好的方法。好吧,如果你正在创建几十个BW。。。你可能想重新思考你的方法:)使用像TPL这样的东西,你会发现一个新的控制世界BW只是为了节省时间,从来没有想过会这样使用。will do TPL似乎是答案,只是有太多的返工要做。。。啊。事实上,我从一个微软开发人员那里得到了一个关于BWs的建议。谢谢你的帮助:)当你在Windows窗体中并且想在另一个线程中发布一个工作时,BW是非常棒的。但当事情变得更复杂时,您有许多并行操作,您开始需要诸如池、节流等东西。。。现在是进入下一个阶段的时候了。看来我必须进入大男孩的行列。这需要我