zoukankan      html  css  js  c++  java
  • 仿 flashget 的多任务进度条控件

    今天忽然想起很久以前简单的模仿了一个, 呵呵(第一次 看到 Flashget 的多任务进度条工具时, 很是欣赏)

    先放一个效果图

    从图上可以看到有两个任务在运行, 各图示的解释:

    灰色:还没开始执行的 cell

    红色:正在执行的 cell

    绿色:执行成功的 cell

    黄色:执行出错的 cell

     控件使用很简单, 大家看看注释应该就明白了

            /// <summary>
            
    /// 普通项目的颜色
            
    /// </summary>
            [Description("普通项目的颜色"), DefaultValue(typeof(Color), "Gray")]
            
    public Color NormalColor
            
            
    /// <summary>
            
    /// 进行中的项目颜色
            
    /// </summary>
            [Description("进行中的项目颜色"), DefaultValue(typeof(Color), "Red")]
            
    public Color ProcessingColor

            
    /// <summary>
            
    /// 成功项目的颜色
            
    /// </summary>
            [Description("已成功完成项目的颜色"), DefaultValue(typeof(Color), "Green")]
            
    public Color CompleteColor

            
    /// <summary>
            
    /// 错误项目的颜色
            
    /// </summary>
            [Description("错误项目的颜色"), DefaultValue(typeof(Color), "Yellow")]
            
    public Color ErrorColor

            
    /// <summary>
            
    /// 每一个任务包含的块数
            
    /// </summary>
            [Browsable(false)]
            
    public List<int> Tasks

            
    // 方法就一个
            
    /// <summary>
            
    /// 设置 Cell 的状态
            
    /// </summary>
            
    /// <param name="task">任务索引</param>
            
    /// <param name="block">任务的块索引</param>
            
    /// <param name="state">状态</param>
            public void SetBlockState(int task, int block, TaskState state)

    再贴一段测试代码(执行后就是上图中中的效果):



            
    private void button1_Click(object sender, EventArgs e)
            {
                
    //开启两个线程, 模仿两个任务
                new Thread(ThreadRun1).Start();
                
    new Thread(ThreadRun2).Start();
            }

            
    //第一个任务
            int thread1Index;

            
    /// <summary>
            
    /// 任务开始
            
    /// </summary>
            void Thread1Start()
            {
                MultiProgress.SetBlockState(
    0, thread1Index, HW.Windows.Forms.TaskState.PROCESSING);
            }
            
    /// <summary>
            
    /// 任务完成
            
    /// </summary>
            void Thread1Complete()
            {
                
    if (thread1Index % 4 == 0)
                    MultiProgress.SetBlockState(
    0, thread1Index++, HW.Windows.Forms.TaskState.ERROR);
                
    else
                    MultiProgress.SetBlockState(
    0, thread1Index++, HW.Windows.Forms.TaskState.COMPLETE);
            }
            
    void ThreadRun1()
            {
                
    for (int i = 0; i < MultiProgress.Tasks[0]; i++)
                {
                    Invoke(
    new MethodInvoker(Thread1Start));
                    
    //处理耗时的操作
                    
    //
                    Thread.Sleep(300);
                    
    //设置状态
                    Invoke(new MethodInvoker(Thread1Complete));
                }
            }

            
    //第二个任务, 代码和第一个一样。。。
            int thread2Index;
            
    void Thread2Start()
            {
                MultiProgress.SetBlockState(
    1, thread2Index, HW.Windows.Forms.TaskState.PROCESSING);
            }

            
    void Thread2Complete()
            {
                
    if (thread2Index % 4 == 0)
                    MultiProgress.SetBlockState(
    1, thread2Index++, HW.Windows.Forms.TaskState.ERROR);
                
    else
                    MultiProgress.SetBlockState(
    1, thread2Index++, HW.Windows.Forms.TaskState.COMPLETE);
            }

            
    void ThreadRun2()
            {
                
    for (int i = 0; i < MultiProgress.Tasks[1]; i++)
                {
                    Invoke(
    new MethodInvoker(Thread2Start));
                    
    //处理耗时的操作
                    
    //
                    Thread.Sleep(200);
                    
    //设置状态
                    Invoke(new MethodInvoker(Thread2Complete));
                }
            }

            
    /// <summary>
            
    /// 设置两个任务, 第一个有30个块, 第二个有50个块
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void Form1_Load(object sender, EventArgs e)
            {
                MultiProgress.Tasks 
    = new List<int>(new int[] { 3050 });

            }


     控件下载

  • 相关阅读:
    iOS开发基础知识--碎片7
    python---ORM之SQLAlchemy(3)外键与relationship的关系
    python---ORM之SQLAlchemy(2)外键使用
    python---ORM之SQLAlchemy(1)
    python---自定义字段验证
    mysql -- 慢日志使用
    mysql -- 索引补充
    mysql -- 动态获取结果集(重点)
    mysql -- 逻辑语句
    mysql -- 事务
  • 原文地址:https://www.cnblogs.com/michaelhuwei/p/1257282.html
Copyright © 2011-2022 走看看