在多线程的情况下,其它线程无法直接调用到主线程上的控件,只能通过代理来实现主线程上控件的调用。
1、定义委托 // 执行任务的委托声明(解决长任务死假) delegate void RunTaskDelegate(int seconds); // 显示进度条的委托声明(跨线程调用控件) delegate void ShowProgressDelegate(int totalStep, int currentStep); 2、定义方法 private void ShowProgress(int totalStep, int currentStep) { progressBar1.Maximum = totalStep; progressBar1.Value = currentStep; } 3、定义线程 private void RunTask(int seconds) { ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress); for (int i = 0; i < seconds * 4; i++) { Thread.Sleep(250); // 在基础窗口上调用显示进度条的委托 this.Invoke(showProgress, new object[] { seconds * 4, i + 1 }); } } 4、执行 RunTaskDelegate runTask = new RunTaskDelegate(RunTask); // 异步调用执行任务的委托 runTask.BeginInvoke(20, null, null); |
|