多线程汇报状态,每秒1次

在 BackgroundWorker 的后台线程中,每秒向UI界面汇报1次状态:

后台线程

后台线程中要执行的代码都是耗时的,要适时将运行状态报告到UI界面上提供给用户。如果每运行一遍就汇报一次则显得太过频繁,影响了效率。选择每秒汇报一次则比较合适。

private void backgroundWork1_DoWork(object sender, DoWorkEventArgs e)
{
   var worker = sender as BackgroundWorker;
   var watch = new StopWatch();
   watch.Start();
   var start = watch.ElapsedMillisecond;

   while(true)
   {
      // TODO: 耗时的操作在这里


      // 1秒汇报一次
      var timeSpan = watch.ElapsedMilliseconds - start;
      if(timeSpan > 1000)  // 1秒
      {   worker.ReportProgress(0,"Hello.");
          start = watch.ElapsedMilliseconds;
      }

      // 判断退出条件
      // 放在while循环的末尾判断退出条件,是为了让退出前的最后一次运行状态也能汇报出去。
      Thread.Sleep(1);
      if(worker.CancellationPending)
      {  
         worker.ReportProgress(0,"lastState");
         e.Cancel = true;
         return;
      }

   }
}
界面线程

界面线程,显示或接收软件产生的数据:

private void backgroundWork1_ProgressChanged(Object sender, ProgressChangedEventArgs e)
{
   richTextBox1.AppendText(string.Format("{0}\n",e.UserState));

}

 

转载于:https://my.oschina.net/u/3799206/blog/1649439

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值