C#多线程控制进度条之长任务操作
许多种类的应用程序都需要长时间操作,比如:执行一个打印任务,请求一个 Web Service 调用等。用户在这种情况下一般会去转移做其他事情来等待任务的完成,同时还希望随时可以监控任务的执行进度。
C#多线程控制进度条之长任务操作图1
下面的代码片断示例了当长任务执行时用户界面是如何被更新的。
- // 显示进度条 ,C#多线程控制进度条之长任务操作
- void ShowProgress( int totalStep, int currentStep )
- {
- _Progress.Maximum = totalStep;
- _Progress.Value = currentStep;
- }
- // 执行任务
- void RunTask( int seconds )
- {
- // 每 1 / 4 秒 显示进度一次
- for( int i = 0; i < seconds * 4; i++ )
- {
- Thread.Sleep( 250 );
- // 显示进度条 ,C#多线程控制进度条之长任务操作
- ShowProgress( seconds * 4, i + 1 );
- }
- }
- private void _btnRun_Click(
- object sender, System.EventArgs e )
- {
- RunTask( Convert.ToInt32( _txtSecond.Value ) );
- }
当我们运行上面的程序,在整个长任务的过程中,没有出现任何问题。这样就真的没有问题了吗?当我们切换应用程序去做其他事情后再切换回来,问题就发生了!主窗体就会出现如下情况:
C#多线程控制进度条之长任务操作图2
这个问题当然会发生,因为我们现在的应用程序是单线程的,因此,当线程执行长任务时,它同时也就不能重画用户界面了。
为什么在我们切换应用程序后,问题才发生呢?这是因为当你切换当前应用程序到后台再切换回前台时,我们需要重画整个用户界面。但是应用程序正在执行长任务,根本没有时间处理用户界面的重画,问题就会发生。
如何解决问题呢?我们需要将长任务放在后台运行,把用户界面线程解放出来,因此我们需要另外一个线程。
C#多线程控制进度条之长任务操作的基本情况就向你介绍到这里,希望对你学习和了解C#多线程控制进度条之长任务操作有所帮助。
【编辑推荐】