zoukankan      html  css  js  c++  java
  • BackgroundWorker学习

    后台代码:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Windows.Forms;
      9 
     10 namespace winform
     11 {
     12     public partial class fm : Form
     13     {
     14         BackgroundWorker worker;
     15         public fm()
     16         {
     17             InitializeComponent();
     18             worker = new BackgroundWorker();
     19             worker.WorkerReportsProgress = true;
     20             worker.WorkerSupportsCancellation = true;
     21             //正式做事情的地方
     22             worker.DoWork += new DoWorkEventHandler(DoWork);
     23             //任务完称时要做的,比如提示等等
     24             worker.ProgressChanged += new ProgressChangedEventHandler(ProgessChanged);
     25             //任务进行时,报告进度
     26             worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted);
     27             progressBar1.Maximum = 100;
     28         }
     29         //调用 RunWorkerAsync 时发生
     30         public void DoWork(object sender, DoWorkEventArgs e)
     31         {
     32             e.Result = ComputeFibonacci(worker, e);
     33 
     34             //获取异步操作结果的值,当ComputeFibonacci(worker, e)返回时,异步过程结束
     35         }
     36 
     37         //调用 ReportProgress 时发生
     38         public void ProgessChanged(object sender, ProgressChangedEventArgs e)
     39         {
     40             this.progressBar1.Value = e.ProgressPercentage;
     41             //将异步任务进度的百分比赋给进度条
     42             int value = int.Parse(e.UserState.ToString());
     43             if (value % 10 == 0)
     44                 textBox1.Text += "
    " + value;
     45             else
     46                 textBox1.Text += "-" + value;
     47             label1.Text = string.Format("完成{0}%", (value + 1) * 100 / progressBar1.Maximum);
     48         }
     49 
     50         //当后台操作已完成、被取消或引发异常时发生
     51         public void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
     52         {
     53             if (e.Cancelled)
     54                 MessageBox.Show("取消了");
     55             else
     56                 MessageBox.Show("完成!" + e.Result);
     57         }
     58 
     59         private int ComputeFibonacci(object sender, DoWorkEventArgs e)
     60         {
     61 
     62             for (int i = 0; i < 100; i++)
     63             {
     64                 //判断应用程序是否取消后台操作
     65                 if (worker.CancellationPending)
     66                 {
     67                     e.Cancel = true;
     68                     break;
     69                 }
     70                 //dowork function
     71                 worker.ReportProgress(i, i);
     72                 System.Threading.Thread.Sleep(50);
     73             }
     74             return -1;
     75         }
     76         private void btnStart_Click(object sender, EventArgs e)
     77         {
     78             if (worker.IsBusy)
     79             {
     80                 MessageBox.Show("已经执行异步操作");
     81                 return;
     82             }
     83             textBox1.Text = "";
     84             label1.Text = "";
     85             worker.RunWorkerAsync();
     86 
     87             btnStart.Enabled = false;
     88 
     89             btnPause.Enabled = true;
     90         }
     91 
     92         private void btnPause_Click(object sender, EventArgs e)
     93         {
     94             btnPause.Enabled = false;
     95 
     96             btnStart.Enabled = true;
     97 
     98             worker.CancelAsync();
     99         }
    100     }
    101 }
    View Code

    页面效果:

  • 相关阅读:
    JAVA面试常见问题之开源框架和容器篇
    JAVA面试常见问题之Redis篇
    JDK8日期时间操作小汇总
    JAVA面试常见问题之数据库篇
    JAVA面试常见问题之设计模式篇
    JAVA面试常见问题之锁机制篇
    JAVA面试常见问题之进程和线程篇
    JAVA面试常见问题之常见集合篇
    JAVA面试常见问题之基础篇
    洛谷P1315 观光公交
  • 原文地址:https://www.cnblogs.com/systemkk/p/6043514.html
Copyright © 2011-2022 走看看