C#线程池设计

1.使用回调函数设计线程池
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ThreadPool
{
public class WaitItem
{
public WaitCallback Works { get; set; }

    public object Context { get; set; }
}

}

2.设计线程的方法属性等
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ThreadPool
{
public class NTask : IDisposable
{
public AutoResetEvent locks { get; set; } //线程锁
public Thread thread{get;set;} //线程对象
public WaitCallback taskWorkItem { get; set; }//线程体委托
public bool working { get; set; } //线程是否工作
public object contextdata{ get; set;}
public event Action WorkComplete; //线程完成一次操作的事件
public string Key { get; set; } //用于字典的Key
//初始化包装器
public NTask()
{
//设置线程一进入就阻塞
locks = new AutoResetEvent(false);
Key = Guid.NewGuid().ToString();
//初始化线程对象
thread = new Thread(Work);
thread.IsBackground = true;
working = true;
contextdata = new object();
//开启线程
thread.Start();
}

    //唤醒线程
    public void Active()
    {
        working = true;
        locks.Set();
    }

    //设置执行委托和状态对象
    public void SetWorkItem(WaitCallback action, object context)
    {
        taskWorkItem = action;
        contextdata = context;
    }

    //线程体包装方法
    private void Work()
    {
        while (working)
        {
            //阻塞线程
            locks.WaitOne();
            taskWorkItem(contextdata);
            //完成一次执行,触发事件
            WorkComplete(this);
        }
    }

    //关闭线程
    public void Close()
    {
        working = false;
    }

    //回收资源
    public void Dispose()
    {
        try
        {
            thread.Abort();
        }
        catch { 
        }
    }
}

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值