计数器和进度条用法

1.使用Timer实现


  1.1插入一个timer控件,属性false,interval 100。插入button,插入textbox如下图。



     

   1.2 代码实现


[csharp]  view plain  copy
  1. public void output(string log)  
  2.      {  
  3.          if (textBox1.GetLineFromCharIndex(textBox1.Text.Length)>100)  
  4.          {  
  5.              textBox1.Text = "";  
  6.          }  
  7.          textBox1.AppendText (DateTime.Now.ToString ("HH:mm:ss    "+log +"\r\n"));  
  8.      
  9.      }  
  10.   
  11.      private void timer1_Tick(object sender, EventArgs e)  
  12.      {  
  13.          if (progressBar1.Value<progressBar1.Maximum)  
  14.          {  
  15.              progressBar1.Value++;  
  16.              output("进度进行中   [" + progressBar1.Value.ToString() + "/" + progressBar1.Maximum + "]....");  
  17.          }  
  18.          else  
  19.          {  
  20.              output ("进度已完成!");  
  21.              timer1.Enabled = false;  
  22.          }  
  23.   
  24.      }  
[csharp]  view plain  copy
  1.         private void button1_Click(object sender, EventArgs e)  
  2.         {  
  3.             output("进度开始!");  
  4.             progressBar1.Value = 0;  
  5.             progressBar1.Minimum = 0;  
  6.             progressBar1.Maximum = 100;  
  7.             timer1.Enabled = true;  
  8.             }  


  1.3 实现效果




2.用Thread和委托实现模拟processBar效果


    2.1 用一个label,一个button,一个进度条如下图。




    2.2  代码实现


[csharp]  view plain  copy
  1. private void button1_Click(object sender, EventArgs e)  
  2. {  
  3.     Worker worker = new Worker();  
  4.   
  5.     /// 订阅事件  
  6.     worker.OnStartWorkEvent += new WorkEventHandler(this.OnStartWorkEventHandler);  
  7.     worker.OnDoWorkEvent += new WorkEventHandler(this.OnDoWorkEventHandler);  
  8.     worker.OnEndWorkEvent += new WorkEventHandler(this.OnEndWorkEventHandler);  
  9.   
  10.     Thread thread = new Thread(new ThreadStart(worker.Work));  
  11.     thread.Start();    
  12. }  
  13. /// <summary>  
  14. /// 线程开始事件,设置进度条最大值,需要一个委托来替我完成  
  15. /// </summary>  
  16. /// <param name="sender"></param>  
  17. /// <param name="e"></param>  
  18. void OnStartWorkEventHandler(object sender, WordEventArgs e)  
  19. {  
  20.     maxValueDelegate max = new maxValueDelegate(SetMaxValue);  
  21.     this.Invoke(max, e);  
  22. }  
  23.   
  24. /// <summary>  
  25. /// 线程执行中的事件,设置进度条当前进度,需要一个委托来替我完成  
  26. /// </summary>  
  27. /// <param name="sender"></param>  
  28. /// <param name="e"></param>  
  29. void OnDoWorkEventHandler(object sender, WordEventArgs e)  
  30. {  
  31.     nowValueDelegate now = new nowValueDelegate(SetNowValue);  
  32.     this.Invoke(now, e);  
  33. }  
  34. /// <summary>  
  35. /// 线程完成事件  
  36. /// </summary>  
  37. /// <param name="sender"></param>  
  38. /// <param name="e"></param>  
  39. void OnEndWorkEventHandler(object sender, WordEventArgs e)  
  40. {  
  41.     endValueDelegate end = new endValueDelegate(SetEndValue);  
  42.     this.Invoke(end, e);  
  43. }  
  44. /// <summary>  
  45. /// 被委托调用,专门设置进度条最大值的  
  46. /// </summary>  
  47. /// <param name="maxValue"></param>  
  48. private void SetMaxValue(WordEventArgs e)  
  49. {  
  50.     this.probar_Test.Maximum = e.Position;  
  51.     lbl_Info.Text = e.Info;  
  52. }  
  53.   
  54. /// <summary>  
  55. /// 被委托调用,专门设置进度条当前值的  
  56. /// </summary>  
  57. /// <param name="nowValue"></param>  
  58. private void SetNowValue(WordEventArgs e)  
  59. {  
  60.     this.probar_Test.Value = e.Position;  
  61.     lbl_Info.Text = e.Info;  
  62. }  
  63.   
  64. /// <summary>  
  65. /// 被委托调用,专门设置进度条结束后的处理  
  66. /// </summary>  
  67. /// <param name="nowValue"></param>  
  68. private void SetEndValue(WordEventArgs e)  
  69. {  
  70.     this.probar_Test.Value = e.Position; ;  
  71.     lbl_Info.Text = e.Info;  
  72.     MessageBox.Show(e.Info);  
  73.   
  74. }  


  2.3实现效果





3.总结收获

  

  3.1 实现方法有很多,不怕不知道,就怕不知道

  3.2 权衡利弊用最适合你系统的方法

  3.3 把功能抽离环境之后,做了好几个小DEMO实现都没有问题,当加入到正在开发的项目中时,就出现了问题。测试环境要真实!开发环境和部署环境要提前做了充分的了解,不要开发了半天才发现框架版本不一致,那就没地方哭了。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值