文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#中怎么利用异步实现一个进度条效果

2023-06-17 23:35

关注

本篇文章给大家分享的是有关C#中怎么利用异步实现一个进度条效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

C#进度条实现之异步实例进度条页面:

//====================================  // Microsoft patterns & practices  // CompositeUI Application Block  //====================================  // Copyright ?Microsoft Corporation.    //All rights reserved.  // THIS CODE AND INFORMATION IS   //PROVIDED "AS IS" WITHOUT WARRANTY  // OF ANY KIND, EITHER EXPRESSED OR   //IMPLIED, INCLUDING BUT NOT  // LIMITED TO THE IMPLIED WARRANTIES  // OF MERCHANTABILITY AND  // FITNESS FOR A PARTICULAR PURPOSE.  //=====================================   using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Text;  using System.Windows.Forms;    namespace BackgroudWokerUI  {  public partial class ProgressForm : Form  {  public ProgressForm()  {  InitializeComponent();  }   //工作完成后执行的事件  public void OnProcessCompleted(object sender, EventArgs e)  {  this.Close();  }   //工作中执行进度更新  ,C#进度条实现之异步实例public void OnProgressChanged(object sender, ProgressChangedEventArgs e)  {  progressWork.Value = e.ProgressPercentage;  }   private void btnClose_Click(object sender, EventArgs e)  {  Close();  }  }  }

C#进度条实现之异步实例主页面:

using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Text;  using System.Windows.Forms;  using System.Threading;   //Note You must be careful not to manipulate any user-interface objects   //in your System.ComponentModel.BackgroundWorker.DoWork event handler.   //Instead, communicate to the user interface through the   //System.ComponentModel.BackgroundWorker.ProgressChanged and   //System.ComponentModel.BackgroundWorker.RunWorkerCompleted events.   namespace BackgroudWokerUI  {  public partial class MainForm : Form  {  //BindingList is useful list for UI   private IList<string> leftList = new BindingList<string>();  private IList<string> rightList = new BindingList<string>();   private BackgroundWorker worker = null;   public MainForm()  {  InitializeComponent();  //Databinding here  listBox1.DataSource = leftList;  listBox2.DataSource = rightList;  }   private void addButton_Click(object sender, EventArgs e)  {  if (textBox.Text.Length != 0)  {  leftList.Add(textBox.Text);  textBox.Text = "";  textBox.Focus();  }  }   private void moveButton_Click(object sender, EventArgs e)  {  //显示进度条  ,C#进度条实现之异步实例ProgressForm progressForm = new ProgressForm();  progressForm.Show();   // Prepare the background worker   //for asynchronous prime number calculation  //准备进度条的记数  worker= new BackgroundWorker();  // Specify that the background   //worker provides progress notifications    //指定提供进度通知  worker.WorkerReportsProgress = true;  // Specify that the background worker supports cancellation  //提供中断功能  worker.WorkerSupportsCancellation = true;  // The DoWork event handler is the main   //work function of the background thread  //线程的主要功能是处理事件  //开启线程执行工作  ,C#进度条实现之异步实例worker.DoWork += new DoWorkEventHandler(worker_DoWork);  // Specify the function to use to handle progress  //指定使用的功能来处理进度  worker.ProgressChanged +=   new ProgressChangedEventHandler(worker_ProgressChanged);  worker.ProgressChanged +=   new ProgressChangedEventHandler(progressForm.OnProgressChanged);  // Specify the function to run when the   //background worker finishes  // There are three conditions possible   //that should be handled in this function:  // 1. The work completed successfully  // 2. The work aborted with errors  // 3. The user cancelled the process  //进度条结束完成工作  //1.工作完成  //2.工作错误异常  //3.取消工作  worker.RunWorkerCompleted +=   new RunWorkerCompletedEventHandler(  worker_RunWorkerCompleted);  worker.RunWorkerCompleted+=  new RunWorkerCompletedEventHandler(  progressForm.OnProcessCompleted);     //If your background operation requires a parameter,   //call System.ComponentModel.BackgroundWorker.RunWorkerAsync   //with your parameter. Inside   //the System.ComponentModel.BackgroundWorker.DoWork   //event handler, you can extract the parameter from the   //System.ComponentModel.DoWorkEventArgs.Argument property.  //如果进度条需要参数  //调用System.ComponentModel.BackgroundWorker.RunWorkerAsync  //传入你的参数至System.ComponentModel.BackgroundWorker.DoWork   //提取参数  //System.ComponentModel.DoWorkEventArgs.Argument   worker.RunWorkerAsync(leftList);  }   //单线程执行工作  private void worker_DoWork(object sender, DoWorkEventArgs e)  {  MoveList((BackgroundWorker)sender,e);  }   //进行转移工作  private void MoveList(BackgroundWorker worker,DoWorkEventArgs e)  {  IList<string> list = e.Argument as IList<string>;   for (int i = 0; i < list.Count; i++)  {  // Check for cancellation  //检查取消  if (worker.CancellationPending)  {  e.Cancel = true;  break;  }  else {  // This will be handled in the correct thread thanks to the   // internals of BackgroundWroker and AsyncOperation  worker.ReportProgress((i + 1) * (100 / list.Count), list[i]);  // Simulate some time consuming proccess.  //线程休眠  Thread.Sleep(500);  }  }  }  //添加数据至右边listBox  private void worker_ProgressChanged(  object sender, ProgressChangedEventArgs e)  {  //Add string to the right listBox  rightList.Add(e.UserState as string);  }   //C#进度条实现之异步实例//工作完成状态  private void worker_RunWorkerCompleted(  object sender, RunWorkerCompletedEventArgs e)  {  if (e.Cancelled)  {  label.Text = "Cancelled!取消";  }  else if (e.Error != null)  {  label.Text = "Error!异常";  }  else {  label.Text = "Success!完成";  leftList.Clear();  }  }  //取消中  private void cancelButton_Click(  object sender, EventArgs e)  {  if (worker.IsBusy)  {  label.Text = "Cancelling...";  //挂起进程  worker.CancelAsync();  }  }  //返回操作  private void moveBackButton_Click(  object sender, EventArgs e)  {  foreach (string str in rightList)  {  leftList.Add(str);  }  rightList.Clear();  }  }  }

以上就是C#中怎么利用异步实现一个进度条效果,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯