C#事件实现文件下载时进度提醒
2024-08-21 11:40:35
C#中的事件是建立在委托的基础上,标准的事件模型应该包括以下几点:
- 声明一个用于定义事件的委托,这里用系统自带的泛型委托原型EventHandler<TEventArgs>,如:public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e);这里面的TEventArgs是由我们自定义的参数类型,继承自EventArgs基类
- 事件参数的名称以EventArgs结束
- 声明事件的委托原型即EventHandler,它的返回值为void
- 声明事件的委托原型即EventHandler,它有两个参数:sender和e,sender表示事件触发者,e表示事件触发时的参数
- 事件的声明是在普通委托声明的前面加上,event关键字,如:public event EventHandler<FileUploaderEventArgs> FileUploaded;
- 因为委托可以在外面由调用者决定其变化,而事件是由所在的类型本身决定变化
文件下载时,要实时更新进度条,这时更新进度的方法就应该由下载类在下载的同时根据实时的下载进度利用事件去同步更新进度条的值,代码如下:
namespace demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
FileUploader f1 = new FileUploader();
f1.FileUploaded += ShowProcess; //绑定事件
ThreadPool.QueueUserWorkItem((a) => f1.Upload());//加入线程池
} private void ShowProcess(object sender, FileUploaderEventArgs e)
{
//定义委托
Action t = () =>
{
progressBar1.Value = e.FileProgress;
label1.Text = e.FileProgress.ToString();
}; //跨线程操作
this.BeginInvoke(t);
Thread.Sleep();
}
} /// <summary>
/// 文件下载类
/// </summary>
class FileUploader
{
public event EventHandler<FileUploaderEventArgs> FileUploaded;//定义事件
public void Upload()
{
var e = new FileUploaderEventArgs() { FileProgress = };
while (e.FileProgress < )
{
e.FileProgress++;
FileUploaded(this, e);//触发事件
}
}
} /// <summary>
/// 自定义参数
/// </summary>
class FileUploaderEventArgs : EventArgs
{
public int FileProgress { get; set; }
}
}
运行截图:
最新文章
- UWP 解决Webview在Pivot里面无法左右滑动的问题
- ember.js:使用笔记1-数组数据统一显示
- 【Unity3D游戏开发】之全局管理类的几种方式 (十六)
- 什么是automatic variable?
- 矩阵乘法 codevs 1287 矩阵乘法
- CodeIgniter框架中关于URL(index.php)的那些事
- Entity Framework 不支持DefaultValue
- Httpclient 和jsoup结和提取网页内容(某客学院视频链接)
- java文件IO操作
- 在其它路径新建cocos2d-x项目
- 通过枚举enum实现单例设计
- C#调用WebService实例和开发
- cocos2dx之lua项目开发中MVC框架的简单应用
- 字符设备 Vs. 块设备 Character Device Vs. Block Device
- 介绍几个好用的android自定义控件
- linux学习之路(3)
- 详解mybatis配置文件
- Vray
- No趴笨小分队
- centos6.9安装oracle11g