zoukankan      html  css  js  c++  java
  • 多进程处理之BackgroundWorker

    说明:通过本例对BackgroundWorker的WorkerReportsProgress,WorkerSupportsCancdllation属性及Dowork,ProessChanged,RunWorkerCompleted事件做进一步的了解。

     

     1   public partial class Form1 : Form
     2     {
     3         public Form1()
     4         {
     5             InitializeComponent();
     6 
     7             //获取或设置一个值,该值指示BW报告能否报告进度更新
     8             backgroundWorker1.WorkerReportsProgress = true;
     9             //获取或设置一个值,该值指示BW是否支持异步取消
    10             backgroundWorker1.WorkerSupportsCancellation = true;
    11             buttonStop.Enabled = false;
    12         }
    13 
    14         private void buttonStart_Click(object sender, EventArgs e)
    15         {
    16             richTextBox1.Text = "开始产生10000以内的随机数……\n\n";
    17             buttonStart.Enabled = false;
    18             buttonStop.Enabled = true;
    19             //在后台开始操作
    20             backgroundWorker1.RunWorkerAsync();
    21         }
    22 
    23         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    24         {
    25             //不要直接使用组件实例名称(backgroundWorker1),因为有多
    26             //个BackgroundWorker时,直接使用会产生耦合问题
    27             //应该通过下面的转换使用它
    28             BackgroundWorker worker = sender as BackgroundWorker;
    29             //下面的内容相当于线程要处理的内容。注意:不要在此事件中和控件打交道
    30             Random r = new Random();
    31             int numCount = 0;
    32             while (worker.CancellationPending == false)
    33             {
    34                 int num = r.Next(10000);
    35                 if (num % 5 == 0)
    36                 {
    37                     numCount++;
    38                     //引发BW.ProgressChanged()事件
    39                     worker.ReportProgress(0, num);
    40                     Thread.Sleep(1000);
    41                 }
    42             }
    43             //DoworkEventArgs.Result 获取或设置表示异步操作结果的值
    44             e.Result = numCount;
    45         }
    46 
    47 
    48         private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    49         {
    50             //object ProgressChangedEventArgs.UserState 获取唯一的用户状态
    51             int num = (int)e.UserState;
    52             richTextBox1.Text += num + ",";
    53         }
    54 
    55         private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    56         {
    57             if (e.Error == null)
    58             {
    59                 richTextBox1.Text += "\n\n操作停止,共产生"+e.Result+"个能被5整除的随机数";
    60             }
    61             else
    62             {
    63                 richTextBox1.Text += "\n操作过程中产生错误:" + e.Error;
    64             }
    65            
    66         }
    67 
    68         private void buttonStop_Click(object sender, EventArgs e)
    69         {
    70             //请求取消挂起后的操作
    71             backgroundWorker1.CancelAsync();
    72             buttonStop.Enabled = false;
    73             buttonStart.Enabled = true;
    74         }
    75     }



  • 相关阅读:
    ASP.NET MVC 5 入门(10):添加验证
    ASP.NET MVC 5 入门(09):添加新字段
    MVC5与EF6结合教程(06):创建更复杂的数据模型
    MVC5与EF6结合教程(05):Code First 迁移和部署
    ASP.NET MVC 5 入门(08):添加搜索方法和搜索视图
    ASP.NET MVC 5 入门(07):检查 Edit 方法和编辑视图
    微信小程序入门1:准备
    MVC5与EF6结合教程(04):连接复原和命令截获
    ASP.NET MVC 5 入门(06):控制器访问模型的数据
    ASP.NET MVC 5 入门(05):创建连接字符串并使用 SQL Server LocalDB
  • 原文地址:https://www.cnblogs.com/January/p/2438710.html
Copyright © 2011-2022 走看看