用到【委托】来实现从非创建控件的线程来访问控件 private Thread thdProcess; private void button1_Click(object sender, EventArgs e) { prgBar.Value=0; thdProcess = new Thread(new ThreadStart(ThreadFun)); thdProcess.Start(); } private void ThreadFun() { MethodInvoker mi = new MethodInvoker( this.InvokeFun ); for( int i = 0; i < 100; i++ ) //窗口關閉後 沒執行完會拋出異常 { this.BeginInvoke( mi ); Thread.Sleep( 100 ); } } //線程調用方法 private void InvokeFun() { if (prgBar.Value < 100) { prgBar.Value = prgBar.Value + 1; } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { if(thdProcess!=null&&thdProcess.ThreadState==ThreadState.Running) { thdProcess.Abort(); //結束線程 thdProcess.Join(1000); //主線程等1秒就計息往下執行走 } }