• 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 );
                }

            }

        }

    }
  • 相关阅读:
    Unix进程和线程管理及其异同
    UnixIPC之共享内存
    Unix/Linux常用文件操作
    java中int和Integer比较
    JAVA四种引用类型
    JAVA-Exception&Error
    JAVA特性-跨平台/面向对象
    JAVA单向链表实现
    linux安装及配置c++的opencv库
    static_cast、const_cast、dynamic_cast、reinterpret_cast
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204947.html
Copyright © 2020-2023  润新知