问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教c#的threadPool是怎么用的

发布网友 发布时间:2022-04-29 00:24

我来回答

2个回答

热心网友 时间:2022-06-26 09:06

可以讲ThreadPool理解成一个“专门执行后台线程的人”。用法挺简单的

using System;
using System.Threading;

public class Example
 {
    public static void Main() 
    {
            // 由线程池启动一个后台线程
            ThreadPool.QueueUserWorkItem(new WaitCallback(MyThreadProc));
            //主线程休眠1秒,等待线程池执行MyThreadProc
            Thread.Sleep(1000);
            Console.WriteLine("程序结束!");
    }

    // 这个是由线程池执行的线程.
    static void MyThreadProc(Object stateInfo) 
    {
        Console.WriteLine("这是由线程池所执行线程打印的信息");
    }
}

热心网友 时间:2022-06-26 09:07

TheadPool的用法:
1、创建一个ManualResetEvent的对象,就像一个信号灯,指示线程的挂起和执行;
2、ManualResetEvent对象创建时,可以指定默认状态:true为有信号,false为无信号;
3、调用Reset()方法重置状态;
4、调用WaitOne()方法,使线程处于等待状态;
5、调用Set()方法设置状态。
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Collections;

namespace Demo
{
public class ParamObject
{
public int number;
public ParamObject (int number)
{
this.number = number;
}
}

public class ThreadClass
{
public Hashtable aHashTable;
public ManualResetEvent aManualResetEvent;
public static int iCount = 0;
public static int iMaxCount = 0;

public ThreadClass(int maxCount)
{
aHashTable = new Hashtable(maxCount);
iMaxCount = maxCount;
}

public void ThreadRun(object aParamObject)
{
Console.WriteLine("HashCode: {0}, Number in Object: {1}", Thread.CurrentThread.GetHashCode(), ((ParamObject)aParamObject).number);
lock (aHashTable)
{
if (!aHashTable.ContainsKey(Thread.CurrentThread.GetHashCode()))
{
aHashTable.Add(Thread.CurrentThread.GetHashCode(), 0);
}
aHashTable[Thread.CurrentThread.GetHashCode()] = (int)aHashTable[Thread.CurrentThread.GetHashCode()] + 1;
}
Thread.Sleep(3000);

Interlocked.Increment(ref iCount);
if (iCount == iMaxCount)
{
Console.WriteLine("Setting aManualResetEvent...");
aManualResetEvent.Set();
}
}
}

class Program
{
public static void Main(string[] args)
{
bool enableThreadPool = false;
int iMaxCount = 20;
ManualResetEvent aManualResetEvent = new ManualResetEvent(false);

Console.WriteLine("Insert {0} items to Thread Pool.", iMaxCount);
ThreadClass aThreadClass = new ThreadClass(iMaxCount);
aThreadClass.aManualResetEvent = aManualResetEvent;

// First, add an item to check if your system supports ThreadPool API function or not.
try
{
ThreadPool.QueueUserWorkItem(new WaitCallback(aThreadClass.ThreadRun), new ParamObject(0));
enableThreadPool = true;
}
catch (NotSupportedException ex)
{
Console.WriteLine("Thread Pool API is not supported in this system.");
enableThreadPool = false;
}

if (enableThreadPool)
{
for (int i = 1; i < iMaxCount; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(aThreadClass.ThreadRun), new ParamObject(i));
}
Console.WriteLine("Waiting for thread pool to drain");
aManualResetEvent.WaitOne(Timeout.Infinite, true);

Console.WriteLine("Thread Pool has been drained.");
Console.WriteLine("Load threads info:");
foreach (object key in aThreadClass.aHashTable.Keys)
{
Console.WriteLine("Key: {0}, Value: {1}", key, aThreadClass.aHashTable[key]);
}
}
Console.ReadLine();
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
男生买卫生巾支援灾区对吗? 打了耳洞三天下了耳钉,怎么办!! cs七龙珠家里两台电脑怎么连局域网玩 CS七龙珠怎么创建联网房间 CS七龙珠怎样和电脑玩 CS七龙珠能和电脑对打吗 不然怎样调对打模式有哪些地图!!!急需... 糖葫芦的山楂在哪里买 衡水市康宁街与人民路交叉口市一建家属院7号楼,1-201怎么翻译 梦见朋友搬家时小孩因我不愿离去,且小孩坐在床上跑出许老鼠? 梦见搬家是什么预兆解梦 同时大量吃火龙果和哈密瓜可以吗 java编程 克隆一个普通对象,克隆后的对象占有各自的堆内存,克隆一个对象数组,对象数组占有同一个内存 C#中使用begininvoke报错PlatformNotSupportedException 这个具体是什么原因导致的,怎么解决? 红烧鲫鱼-煎鱼不破秘决怎么做好吃? 如何煎鱼才好吃 怎么做简单又好吃的香煎鲫鱼? 怎样做好吃的平底锅煎鲫鱼是怎样做的? 抖音蓝V消失怎么恢复- 问一问 抖音蓝v认证不通过钱能退回来吗?- 问一问 取消抖音蓝v认证跟没开通蓝v有区别不- 问一问 抖店关闭蓝V会取消吗 怎么关闭抖音蓝v认证- 问一问 ps怎么把图片融入文字里 怎样用ps把图放进字里面?详解 叮叮收藏文件用手机咋样打包发送 如何将钉钉写好的文档收藏并转发给其他人? 嗯微信密码丢了他说我操作太频繁现在怎么办呢! 心理咨询师证和心理治疗师证,哪个更管用? 微信密码忘记了,用手机号登陆说太频繁是怎么回事 手机微信密码丢了怎么找回,已经都找回好几次了,说系统过于频繁,怎么办 安装oracle 11g rac报错。environment does not meet minimum requirement... 火龙果可以和哈密瓜一起吃吗 火龙果是酸性还是碱性? 火龙果和哈密瓜可以一起吃吗? 哈密瓜火龙果能一起吃吗 东亚银行储蓄卡好办吗 有谁办过东亚银行的信用卡,,我想办一张 哈密瓜和火龙果哪个营养价值高 安徽特产黄山烧饼那么好吃,到底怎么做的 东亚银行信用卡怎么样?东亚银行信用卡好吗 风冷冰箱有没有排水口 黄山名小吃,安徽特产,黄山烧饼,哪里有最正宗的卖? 用苹果13抖音直播,卡顿加闪退- 问一问 女生乳房如何保存坚挺 哺乳期被人气劝退走劳动仲裁书怎样写 劳动仲裁申请书怎样写,可以追讨公司哪些赔偿? 有什么方法让奶头挺起来 QQ邮箱设置苹果手机密码重置显示无法验证身份怎么弄- 问一问 如何让乳头时刻保持硬挺? 孕期被辞退劳动仲裁申请书应该怎么写