• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#事件实现文件下载时进度提醒

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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;
  • 因为委托可以在外面由调用者决定其变化,而事件是由所在的类型本身决定变化

文件下载时,要实时更新进度条,这时更新进度的方法就应该由下载类在下载的同时根据实时的下载进度利用事件去同步更新进度条的值,代码如下:

 1 namespace demo
 2 {
 3     public partial class Form1 : Form
 4     {
 5         public Form1()
 6         {
 7             InitializeComponent();
 8         }
 9 
10         private void button1_Click(object sender, EventArgs e)
11         {
12             FileUploader f1 = new FileUploader();
13             f1.FileUploaded += ShowProcess;                  //绑定事件
14             ThreadPool.QueueUserWorkItem((a) => f1.Upload());//加入线程池
15         }
16 
17         private void ShowProcess(object sender, FileUploaderEventArgs e)
18         {
19             //定义委托
20             Action t = () =>
21             {
22                 progressBar1.Value = e.FileProgress;
23                 label1.Text = e.FileProgress.ToString();
24             };
25 
26             //跨线程操作
27             this.BeginInvoke(t); 
28             Thread.Sleep(500);
29         }
30     }
31 
32     /// <summary>
33     /// 文件下载类
34     /// </summary>
35     class FileUploader
36     {
37         public event EventHandler<FileUploaderEventArgs> FileUploaded;//定义事件
38         public void Upload()
39         {
40             var e = new FileUploaderEventArgs() { FileProgress = 0 };
41             while (e.FileProgress < 100)
42             {
43                 e.FileProgress++;
44                 FileUploaded(this, e);//触发事件
45             }
46         }
47     }
48 
49     /// <summary>
50     /// 自定义参数
51     /// </summary>
52     class FileUploaderEventArgs : EventArgs
53     {
54         public int FileProgress { get; set; }
55     }
56 }

运行截图:

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【C++】C++中的分离式编译发布时间:2022-07-13
下一篇:
在十六进制字符串与数值类型之间转换C#编程指南发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap