仿 flashget 的多任务进度条控件

今天忽然想起很久以前简单的模仿了一个, 呵呵(第一次 看到 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 [] {  30 50  });

        }


 控件下载

你可能感兴趣的:(Flash)