前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >unity + WebClient显示下载速度,当前下载量,下载总量

unity + WebClient显示下载速度,当前下载量,下载总量

作者头像
立羽
发布2023-08-24 13:50:23
2860
发布2023-08-24 13:50:23
举报
文章被收录于专栏:Unity3d程序开发Unity3d程序开发

在这资源更新的进度条显示时

代码语言:javascript
复制
            using (WebClient client = new WebClient()) {
                sw.Start();
                client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                client.DownloadFileAsync(new System.Uri(url), currDownFile);
            }

注册上进度条下载的委托和下载完成的委托就可以了

在更新进度条的委托中可以得到下载的进度条和下载的总大小以及已经下载的大小。

用e.UserState可以取到传入的参数,由于是下载文件有可能下载多个但是更新进度条的方法都走的一个方法所以需要用UserState来取得对应下载任务的进度条。

下面贴一下这两个委托的实现方法,我将WebClient简单封装了一下。

代码语言:javascript
复制
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
        //下载的总量
        PrecentData preData = new PrecentData();
        preData.total = string.Format("{0} MB / {1} MB", (e.BytesReceived / 1024d / 1024d).ToString("0.00"),  (e.TotalBytesToReceive / 1024d / 1024d).ToString("0.00"));
        preData.precent = (float)e.BytesReceived / (float)e.TotalBytesToReceive;



            string value = string.Format("{0} kb/s", (e.BytesReceived / 1024d / sw.Elapsed.TotalSeconds).ToString("0.00"));

        preData.speed = value;

        Loom.QueueOnMainThread((param) =>
        {
            NotificationCenter.Get().ObjDispatchEvent(KEventKey.m_evDownload, preData);
        }, null);

        
            NotiData data = new NotiData(NotiConst.UPDATE_PROGRESS, value);
            if (m_SyncEvent != null) m_SyncEvent(data);

            if (e.ProgressPercentage == 100 && e.BytesReceived == e.TotalBytesToReceive) {
                sw.Reset();

                data = new NotiData(NotiConst.UPDATE_DOWNLOAD, currDownFile);
                if (m_SyncEvent != null) m_SyncEvent(data);
            }
        }

要显示下载百分比使用

代码语言:javascript
复制
string.Format("{0} MB / {1} MB", (e.BytesReceived / 1024d / 1024d).ToString("0.00"),  (e.TotalBytesToReceive / 1024d / 1024d).ToString("0.00"));

要显示当前的下载速度

代码语言:javascript
复制
string.Format("{0} kb/s", (e.BytesReceived / 1024d / sw.Elapsed.TotalSeconds).ToString("0.00"));
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档