C#多线程控制进度条之长任务操作

开发 后端
C#多线程控制进度条之长任务操作具体的是如何的呢?C#多线程控制进度条之长任务操作需要注意什么呢?那么本文就向你介绍相关的内容。

C#多线程控制进度条之长任务操作

许多种类的应用程序都需要长时间操作,比如:执行一个打印任务,请求一个 Web Service 调用等。用户在这种情况下一般会去转移做其他事情来等待任务的完成,同时还希望随时可以监控任务的执行进度。

阻塞方式执行 

C#多线程控制进度条之长任务操作图1

下面的代码片断示例了当长任务执行时用户界面是如何被更新的。

// 显示进度条  ,C#多线程控制进度条之长任务操作
void ShowProgress( int totalStep, int currentStep )  
{  
_Progress.Maximum = totalStep;  
_Progress.Value = currentStep;  
}  
 
// 执行任务  
void RunTask( int seconds )  
{  
// 每 1 / 4 秒 显示进度一次  
forint 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 ) );  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

当我们运行上面的程序,在整个长任务的过程中,没有出现任何问题。这样就真的没有问题了吗?当我们切换应用程序去做其他事情后再切换回来,问题就发生了!主窗体就会出现如下情况:

运行结果 

C#多线程控制进度条之长任务操作图2

这个问题当然会发生,因为我们现在的应用程序是单线程的,因此,当线程执行长任务时,它同时也就不能重画用户界面了。

为什么在我们切换应用程序后,问题才发生呢?这是因为当你切换当前应用程序到后台再切换回前台时,我们需要重画整个用户界面。但是应用程序正在执行长任务,根本没有时间处理用户界面的重画,问题就会发生。

如何解决问题呢?我们需要将长任务放在后台运行,把用户界面线程解放出来,因此我们需要另外一个线程。

C#多线程控制进度条之长任务操作的基本情况就向你介绍到这里,希望对你学习和了解C#多线程控制进度条之长任务操作有所帮助。

【编辑推荐】

  1. C#进度条使用之多线程应用浅析
  2. C#进度条实现之异步实例浅析
  3. C#进度条实现实例
  4. C#进度条之控制台显示浅析
  5. C# WinForm进度条实现浅析
责任编辑:仲衡 来源: 博客园
相关推荐

2009-08-17 16:41:03

C#多线程控制

2009-08-17 16:56:51

C#多线程控制进度条

2009-08-17 16:49:46

C#多线程控制

2009-08-17 14:08:33

C#进度条使用

2009-08-17 15:05:41

C#进度条

2009-08-17 15:48:47

C# WinForm进

2009-08-18 09:49:00

C# listview

2009-08-17 14:41:47

C#进度条实现

2009-08-28 16:51:32

C#线程控制

2009-08-17 17:15:48

C# 进度条效果

2011-07-05 15:16:00

QT 进度条

2009-08-17 14:36:15

C#进度条实现

2009-08-17 13:56:29

C#进度条的使用

2009-08-27 14:01:41

C#进度条

2015-07-31 11:19:43

数字进度条源码

2021-09-09 07:16:00

C#多线程开发

2024-08-06 14:29:37

2009-09-04 10:42:56

C#流程控制语句

2011-06-24 11:12:39

Qt 多线程 线程

2009-08-12 18:04:44

编写C#多线程
点赞
收藏

51CTO技术栈公众号