一个C# (队列多任务+多线程处理)对象的winform demo

本文介绍了一个C#的Winform示例,展示了如何利用队列和多线程处理任务。文章强调了线程控制的重要性,指出线程数量并非越多越好。内容包括队列的改造、Winform代码实现、演示图片以及两个关键改进:任务开始事件的添加和在Winform中订阅事件的委托程序。
摘要由CSDN通过智能技术生成

阅读本文前,先阅读:https://www.cnblogs.com/zetee/p/3487084.html 

该文中构建多线程任务的思路,与delphi下构建多任务线程池的方式类似,实现繁多的任务用一定数量的线程进行处理。对并发线程的控制,是善用多线程的技巧之一,线程并不是越多越好。

本文另外的一个目的:让读者在winform下使用该对象。废话不说,上代码。

(1)队列改造

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace MTHdQueue
{

public class DownLoadFile
{
    public string FileName { get; set; }

}


public  class QueueThreadBase
{
    #region 变量&属性

    /// 待处理结果

    private class PendingResult
    {
        /// 待处理值
        public DownLoadFile PendingValue { get; set; }

        /// 是否有值
        public bool IsHad { get; set; }
    }

    /// 线程数
    public int ThreadCount
    {
        get { return this.m_ThreadCount; }
        set { this.m_ThreadCount = value; }
    }
    private int m_ThreadCount = 5;

    /// 取消=True
    public bool Cancel { get; set; }

    /// 线程列表
    List<Thread> m_ThreadList;

    /// 完成队列个数
    private volatile int m_CompletedCount = 0;

    /// 队列总数
    private int m_QueueCount = 0;

    /// 全部完成锁
    private object m_AllCompletedLock = new object();

    /// 完成的线程数

    private int m_CompetedCount = 0;

    /// 队列锁

    private object m_PendingQueueLock = new object();
    private Queue<DownLoadFile> m_InnerQueue; //--内部队列..
    //public DownLoadFile Peek()
    //{
    //    return m_InnerQueue.Dequeue();
    //}
    //public void AddQueue(DownLoadFile ff)
    //{
    //    try
    //    {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值