异步下载,顾名思义就是不影响你主线程使用客户端的时候,人家在后台搞你的明堂。

直接入主题,既然要下载,首先得请求,请求成功之后进行回调,这就是一个异步过程,异步回调的时间不可控。

1、首先请求下载。

    public  bool DownLoadFile(DownLoadFileModel file){try{HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://192.168.1.1:8080/" + file.FileName);        //DownLoadFileModel 为我自己定义的一个实体类,文件名需要带后缀名file.request = request;//实体类中将http的请求信息也带进去了,方便回调中的判断request.BeginGetResponse(new AsyncCallback(ResponseCallbackDownLoad), file);//ResponseCallbackDownLoad请求成功后的回调方法return true;}catch {return false;}}

  2、请求成功之后就会去调用ResponseCallbackDownLoad方法,这个方法是异步的,是在子线程里执行,如果在消息者模式下在这个回调里面发送监听到主线程,再操作GameObject对象就会报错,或者直接调用主线程的GameObject也会报错,至于怎么去获取这个下载的信息并操作界面,我想这个我想我就不用多说了。不多说了,上回调代码,回调代码是在子线程里执行。

 private  void ResponseCallbackDownLoad(IAsyncResult ar){//throw new NotImplementedException();try{object req = ar.AsyncState as object;;if (req == null) return;DownLoadFileModel file = ar.AsyncState as DownLoadFileModel;//获取异步下载的请求的相关信息,以便判断HttpWebResponse response = file.request.EndGetResponse(ar) as HttpWebResponse;if (response.StatusCode != HttpStatusCode.OK){response.Close();return;}Stream outStream;Stream inStream = response.GetResponseStream();byte[] b = new byte[1024];FileInfo fi = new FileInfo(Application.persistentDataPath+ "//" + file.SaveName);if (fi.Exists){//TODO如果文件件存在,TODO    }else  //else如果该文件不存在{try{int readCount = inStream.Read(b, 0, b.Length);outStream = fi.Create();long fileLength = response.ContentLength;//获取文件总长度long fileSize = 0;//已下载的文件长度while (readCount > 0){outStream.Write(b, 0, readCount);fileSize += readCount;int progress = (int)(((float)fileSize / (float)fileLength) * 100);//progress 为计算下载的百分比readCount = inStream.Read(b, 0, b.Length);}outStream.Close();inStream.Close();response.Close();}}catch (Exception ex){}}}catch (Exception ex){Debug.Log("文件下载失败" + ex.Message);}}
}

  

转载于:https://www.cnblogs.com/vsirWaiter/p/5377788.html

unity下载文件三(http异步下载)相关推荐

  1. Android下载文件(一)下载进度断点续传

    Android下载文件(一)下载进度&断点续传 索引 Android下载文件(一)下载进度&断点续传 Android下载文件(二)单任务多线程并发&断点续传(待续) Andro ...

  2. python 下载文件-python爬虫之下载文件的方式总结以及程序实例

    python爬虫之下载文件的方式以及下载实例 目录 第一种方法:urlretrieve方法下载 第二种方法:request download 第三种方法:视频文件.大型文件下载 实战演示 第一种方法: ...

  3. 上传文件正常,下载文件查看失败,下载文件大小为0kb

    上传文件正常,下载文件查看失败,下载文件大小为0kb 首先查看前台传进来的文件名与目录下的文件名是否一致,其次查看下载文件路径是否正确. 我的多出来个日期文件夹 is = new FileInputS ...

  4. linux下载文件夹到本地命令行,linux下载文件到本地命令,linux下载文件到本地命令 下载工具...

    linux下载文件到本地命令,linux下载文件到本地命令 下载工具 来源:互联网/编辑:佚名/时间:2020-09-08 在手机上看 扫一扫进入手机端 linux用户命令在哪个文件夹下 用 whic ...

  5. android+后台下载notification,Android实现Service下载文件,Notification显示下载进度的示例...

    先放个gif..最终效果如果: 主要演示了Android从服务器下载文件,调用Notification显示下载进度,并且在下载完毕以后点击通知会跳转到安装APK的界面,演示是在真实的网络环境中使用真实 ...

  6. NX二次开发 判断外挂是否需要更新,从PTF下载文件(从服务器下载文件)

    NX二次开发 判断外挂是否需要更新,从PTF下载文件(从服务器下载文件) //电信的宽带很快,移动到宽带要加载好几秒#include <stdio.h> #include <stri ...

  7. python下载url_三种Python下载url并保存文件的代码详解

    利用程序自己编写下载文件挺有意思的. Python中最流行的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外 ...

  8. python urllib下载文件怎么停止_python下载文件的三种方法

    Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法 ...

  9. vnc远程桌面下载,三款能够下载文件的vnc远程桌面软件

    vnc远程桌面下载是一款什么软件呢?它的全称是vnc远程控制软件.看到远程控制软件就可以知道这是一款什么软件,vnc远程桌面下载讲究的是方便好操作,因为远程控制这个功能就是比较麻烦的.下面给大家介绍三 ...

最新文章

  1. php与eCharts结合,23.安装php和echarts进行结合展示图表
  2. php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法
  3. PHP网站开发有哪些框架,罗列几款时下高人气的PHP开发框架
  4. yolov3 指定gpu_干货|手把手教你在NCS2上部署yolov3-tiny检测模型
  5. 自动化测试===Macaca环境搭建,自我总结
  6. 亿图图示(edrawmax中文版) v10.1.7pjb
  7. 最大子列和问题(C语言)
  8. 运放的相位补偿 ?
  9. Wordpress 主题开发教程-从零开始制作主题
  10. 某妹游戏登录加密(webpack)
  11. 在电脑上收听广播——龙卷风网络收音机试用
  12. 2021-01-19第二次Sping Boot学习汇报--利用用Spring Initializr构建项目
  13. 元宇宙产业委共同主席倪健中带队参访杭州市总工会推动元宇宙合作
  14. php 圆角的度数计算,【圆角度的计算公式是什么】-圆的角度公式-数学-沃捍瞻同学...
  15. web项目经理手册-项目经理需要铭记在心的话
  16. nodeJS Express 删除 x-powered-by
  17. 假设检验:一个总体参数的检验、总体方差检验、两个总体参数的检验和两个总体方差的检验
  18. 加州大学伯克利分校计算机科学专业,加州大学伯克利分校计算机科学专业排名第1(2020年USNEWS美国排名)...
  19. 标准化软件应用程序设计
  20. 2022亚马逊云科技re:Invent,与合作伙伴描绘宏伟蓝图

热门文章

  1. Object C学习笔记22-#define 用法
  2. Highlight – 代码高亮html输出软件
  3. 2.5英寸硬盘何止“五脏俱全”(硬盘构造再揭秘之四)
  4. 2017c语言考核册答案,2017年最新C语言考题带答案
  5. clip\_gradient
  6. 【LDA学习系列】LDA-Python库
  7. 损失函数中正则化项L1和L2的理解
  8. 【知识发现】基于物品的协同过滤推荐算法python实现
  9. 【Python学习系列十八】基于scikit-learn库逻辑回归训练模型(delta比赛代码3)
  10. 模式扩展 ——简单工厂+配置文件解除耦合 *****