这个问题来自社区提问,代码保留一份用来以后回答 using System; using System.ComponentModel; using System.Windows.Forms; namespace WindowsApplication4 { /// <summary> /// gui 类 /// </summary> public partial classForm1 : Form { public Form1() { InitializeComponent(); } private voidbutton1_Click( objectsender, EventArgs e) { // 用子线程工作 newSystem.Threading.Thread( new System.Threading.ThreadStart(StartDownload)).Start(); } // 开始下载 publicvoid StartDownload() { Downloader downloader= newDownloader(); downloader.onDownLoadProgress+= new Downloader.dDownloadProgress(downloader_onDownLoadProgress); downloader.Start(); } // 同步更新ui voiddownloader_onDownLoadProgress( long total, longcurrent) { 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 { // 委托 publicdelegate void dDownloadProgress(long total, long current); // 事件 publicevent dDownloadProgress onDownLoadProgress; // 开始模拟工作 publicvoid Start() { for ( int i =0 ; i < 100; i ++ ) { if (onDownLoadProgress!= null) onDownLoadProgress(100 , i); System.Threading.Thread.Sleep(100 ); } } } }