使用线程池
我的问题是: 我想用多线程TECHNIC工作 所以我用的线程池,但我要的是下面 我想确定线程池的大小,当程序被启动 时,我有要管理的数据,我将从ThreadPool中使用一个线程来处理这个项目, ,因为我已经阅读过,您可以根据需要在threadPool中定义项目,但每个线程都将自动运行我想要控制线程以确定何时线程应运行 如果没有数据线程应等待(或停止)当我有一个新的数据(这就像一个请求) 其中一个线程将运行.....谢谢使用线程池
使用ThreadPool
时,您通常会使用一些(可选)输入数据将请求排列到池中,这会导致池选择可用线程并运行该进程。完成后,该线程返回到池中,并可用于其他请求。你通常不需要费心管理线程,但可以简单地排队一个工作项需要的时候:
DataToWorkWith dataItem = GetDataToWorkWith();
if (dataItem != null)
{
ThreadPool.QueueUserWorkItem(MyProcessingMethod, dataItem);
}
// somewhere else in the class
private void MyProcessingMethod(object dataItem)
{
// work with the dataItem; this will run on a threadpool thread, if
// invoked through the thread pool
}
因此,所有你需要做的是建立一些过程搞清楚,如果有数据工作将请求排列在ThreadPool
中并让它完成工作。
以下是关于C# ThreadPool Usage的简短摘要。以下是MSDN How To: Use a ThreadPool。这里是ThreadPool
参考。
特别是,您可以使用GetAvailableThreads
获得可用的线程。您还可以使用SetMinThreads
和SetMaxThreads
来控制线程池中的最小和最大线程数。
一般来说,我会建议不要搞乱线程的数量,除非你确切地知道你在做什么。线程池由您和CLR组件共享,因此通过更改线程数可以影响CLR行为。有关更多详细信息,请阅读ThreadPool
类文档中的备注部分。
您通常不会手动管理ThreadPool中的线程。建议的用法是将代理队列作为Fredrik的示例,并让ThreadPool管理线程。有了这个约定,如果没有数据,你不应该排队任何工作。当数据可用时,您可以排队工作。如果您正在寻找运行后台进程的方式,那么在您的应用程序启动时,您可以创建Timer
并将其添加到应用程序的状态,或者您可以定义一个静态类来管理Timer
,并在应用程序启动时触摸该类。
WTF。这里没有问题。问题以问号(?)结尾。除此之外,这是一个漫无边际的思想。说真的,我在这里甚至找不到单独的句子。投票到关闭。 – abelenky 2009-10-21 21:22:45