因为在winform程序中,UI线程负责界面相关的工作。
Winform中使用进度条的方法有很多,可以直接创建一个新的线程Thread执行耗时的方法;也可以使用线程池。
例如:
//使用线程池异步执行longTime方法,不阻塞UI线程 System.Threading.ThreadPool.QueueUserWorkItem(_ => { DoSomething(); }
如果想使用进度条,可以模拟进度操作,在一个循环内,
//使用线程池异步执行longTime方法,不阻塞UI线程 System.Threading.ThreadPool.QueueUserWorkItem(_ => { DoSomething(); //模拟更新进度条 UpdateProgress(total, i); } /// <summary> /// 模拟更新进度条 /// </summary> /// <param name="total">总进度</param> /// <param name="value">当前进度</param> private void UpdateProgress(int total, int value) { this.BeginInvoke(new Action(() => { this.progressBar1.Minimum = 0; this.progressBar1.Maximum = total; this.progressBar1.Value = value; })); }