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

来源:中国IT实验室 作者:佚名 2008-05-08 出处:pcdog.com

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

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



上一篇:DataReader与DataTable,DataSet转换
下一篇:C#中全局鼠标、键盘Hook的应用方法