这个问题来自社区提问,代码保留一份用来以后回答 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,EventArgse) ... { // 用子线程工作 new System.Threading.Thread( new System.Threading.ThreadStart(StartDownload)).Start(); } // 开始下载 public void StartDownload() ... { Downloaderdownloader = 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 dDownloadProgressonDownLoadProgress; // 开始模拟工作 public void Start() ... { for ( int i = 0 ;i < 100 ;i ++ ) ... { if (onDownLoadProgress != null ) onDownLoadProgress( 100 ,i); System.Threading.Thread.Sleep( 100 ); } } } }