c#中子线程控制进度条的一个简单例子

这个问题来自社区提问,代码保留一份用来以后回答

using  System;
using  System.ComponentModel;
using  System.Windows.Forms;
namespace  WindowsApplication4
{
    
///   <summary>
    
///  gui 类
    
///   </summary>

     public   partial   class  Form1 : Form
    
{
        
public  Form1()
        
{
            InitializeComponent();
        }

        
private   void  button1_Click( object  sender, EventArgs e)
        
{
            
// 用子线程工作
             new  System.Threading.Thread( new  System.Threading.ThreadStart(StartDownload)).Start();
        }

        
// 开始下载
         public   void  StartDownload()
        
{
            Downloader downloader 
=   new  Downloader();
            downloader.onDownLoadProgress 
+=   new  Downloader.dDownloadProgress(downloader_onDownLoadProgress);
            downloader.Start();
        }

        
// 同步更新ui
         void  downloader_onDownLoadProgress( long  total,  long  current)
        
{
            
if  ( this .InvokeRequired)
            
{
                
this .Invoke( new  Downloader.dDownloadProgress(downloader_onDownLoadProgress),  new   object []  { total, current } );
            }

            
else
            
{
                
this .progressBar1.Maximum  =  ( int )total;
                
this .progressBar1.Value  =  ( int )current;
            }

        }

    }


    
///   <summary>
    
///  下载类
    
///   </summary>

     public   class  Downloader
    
{
        
// 委托
         public   delegate   void  dDownloadProgress( long  total, long  current);
        
// 事件
         public   event  dDownloadProgress onDownLoadProgress;
        
// 开始模拟工作
         public   void  Start()
        
{
            
for  ( int  i  =   0 ; i  <   100 ; i ++ )
            
{
                
if  (onDownLoadProgress  !=   null )
                    onDownLoadProgress(
100 , i);
                System.Threading.Thread.Sleep(
100 );
            }

        }

    }

}
原文地址:https://www.cnblogs.com/cl1024cl/p/6204947.html