改善C#程序的157个建议(连载79)

发表于:2011-11-25 11:04

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陆敏技    来源:51Testing软件测试网采编

分享:

  线程池技术能让我们重点关注业务的实现,而不是线程的性能测试。

  本建议还提到了一个类型BackgroundWorker。BackgroundWorker是在内部使用了线程池的技术;同时,在Winform或WPF编码中,它还给工作线程和UI线程提供了交互的能力。如果我们稍加注意,就会发现:Thread和ThreadPool默认都没有提供这种交互能力,而BackgroundWorker却通过事件提供了这种能力。这种能力包括:报告进度、支持完成回调、取消任务、暂停任务等。一个使用BackgroundWorker的简单示例如下:

  • private BackgroundWorker worker;  
  • private void startAsyncButton_Click(System.Object sender,  
  •     System.EventArgs e)  
  • {  
  •     worker.DoWork += new DoWorkEventHandler(worker_DoWork);  
  •     worker.ProgressChanged += new   
  •         ProgressChangedEventHandler(worker_ProgressChanged);  
  •     worker.RunWorkerAsync();  
  • }  
  • private void worker_DoWork(object sender, DoWorkEventArgs e)  
  • {  
  •     BackgroundWorker worker = sender as BackgroundWorker;  
  •     for (int i = 0; i < 10; i++)  
  •     {  
  •         worker.ReportProgress(i);  
  •         Thread.Sleep(100);  
  •     }  
  • }  
  • private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)  
  • {  
  •     this.label1.Text = e.ProgressPercentage.ToString();  
  • }
  •   该示例是一个Winform窗体程序,正在从事Winform或WPF开发的人员,可考虑使用BackgroundWorker。

    相关链接:

    连载1       连载2       连载3        连载4        连载5       连载6       连载7       连载8       连载9

    连载10     连载11     连载12     连载13     连载14     连载15     连载71     连载72     连载73     

    连载74     连载75     连载76     连载77     连载78

    22/2<12
    重磅发布,2022软件测试行业现状调查报告~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

    法律顾问:上海漕溪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号