silverlight文件下载
4:首先在前台添加下载按钮代码:
<Button Content="使用WebRequest来下载" Click="Download_Click" />
后台代码如下:
private void Download_Click(object sender, RoutedEventArgs e)
{string filePath = "http://localhost:34270/ClientBin/test.rar";WebRequest request = WebRequest.Create(filePath);request.BeginGetResponse((responseAsyncCallBack) =>{SaveFileDialog sfd = new SaveFileDialog();string extension = System.IO.Path.GetExtension(filePath);sfd.Filter = string.Format("*{0}| *{0}", extension);if (sfd.ShowDialog() == true){Stream openFileStream = sfd.OpenFile();#region 获取response bytesWebResponse response = request.EndGetResponse(responseAsyncCallBack);Stream responseStream = response.GetResponseStream();Byte[] bufferBytes = new Byte[responseStream.Length];responseStream.Read(bufferBytes, 0, bufferBytes.Length);#endregionopenFileStream.Write(bufferBytes, 0, bufferBytes.Length);openFileStream.Flush();}}, null);}
因为request.BeginGetResponse是异步的,所以在获取Response之后再弹出保存按钮。
聪明的你能看出这段代码的问题吗??
运行结果如下:
错误是只能对UI线程执行操作,难道需要使用BeginInvoke??
OK,修改代码:
request.BeginGetResponse((responseAsyncCallBack) =>
{
this.Dispatcher.BeginInvoke(() =>
{ //code});
}, null);
继续运行,结果如下:
情况是这样的,微软为了保证对话框必须由用户启动,所以任何尝试使用委托,或代码的方式来弹出对话框都会抛出SecurityException.
那么如何做呢?
首先SaveFileDialog必须在Download_Click事件里面,这样才不会抛出SecurityException.
所以在WebRequest request = WebRequest.Create(filePath);的后面增加代码:
//判断是否需要下载bool needDownload = false;SaveFileDialog sfd = new SaveFileDialog();string extension = System.IO.Path.GetExtension(filePath);sfd.Filter = string.Format("*{0}| *{0}", extension);if (sfd.ShowDialog() == true){needDownload = true;}
接着修改BeginGetResponse,在needDownload为true的时候开始下载文件:
if (needDownload) { request.BeginGetResponse((responseAsyncCallBack) => { this.Dispatcher.BeginInvoke(() => { using (Stream openFileStream = sfd.OpenFile()) { #region 获取response bytes WebResponse response = request.EndGetResponse(responseAsyncCallBack); Stream responseStream = response.GetResponseStream(); Byte[] bufferBytes = new Byte[responseStream.Length]; responseStream.Read(bufferBytes, 0, bufferBytes.Length); #endregion openFileStream.Write(bufferBytes, 0, bufferBytes.Length); openFileStream.Flush(); } }); }, null); }
完整的代码如下:
///<summary> ///下载按钮点击事件///</summary> private void Download_Click(object sender, RoutedEventArgs e) { string filePath = "http://localhost:34270/ClientBin/test.rar"; WebRequest request = WebRequest.Create(filePath); //判断是否需要下载bool needDownload = false; SaveFileDialog sfd = new SaveFileDialog(); string extension = System.IO.Path.GetExtension(filePath); sfd.Filter = string.Format("*{0}| *{0}", extension); if (sfd.ShowDialog() == true) { needDownload = true; } if (needDownload) { request.BeginGetResponse((responseAsyncCallBack) => { this.Dispatcher.BeginInvoke(() => { using (Stream openFileStream = sfd.OpenFile()) { #region 获取response bytes WebResponse response = request.EndGetResponse(responseAsyncCallBack); Stream responseStream = response.GetResponseStream(); Byte[] bufferBytes = new Byte[responseStream.Length]; responseStream.Read(bufferBytes, 0, bufferBytes.Length); #endregion openFileStream.Write(bufferBytes, 0, bufferBytes.Length); openFileStream.Flush(); } }); }, null); } }
转载自:http://www.cnblogs.com/LoveJenny/archive/2011/07/10/2102114.html
silverlight文件下载相关推荐
- silverlight 文件下载若干方法
方法一:WebService 前台代码: < DataTemplate > < Button Content ="下载" Height ="23&quo ...
- Silverlight技术研讨(1):WebClient, 文件下载利器
对于小型的Silverlight应用程序,可以把所有内容,包括资源,都包含在一个Xap包中发布.对于开发者来说,是个很便利的选择,可以把更多的精力和时间用到程序的功能方面,提高开发效率.但是对于使用者 ...
- EntityFramework+DomainDataSource+Silverlight完成数据读取分页排序与修改
关于EF.SL.DomainDataSource的说明园子上够多了,这儿就不多说了. 1.安装VS2010与Silverlight 4 Tools-- 2.打开VS2010,新键Silverlight ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(10月30日-11月6日)
分享Silverlight/WPF/Windows Phone一周学习导读(10月30日-11月6日) 本周Silverlight学习资源更新 Silverlight 定位 niejunhua [学习 ...
- silverlight 类似百度的图片浏览器,视频播放,附件下载功能,全部后台程序。...
#region =========图片点击按钮================String[] nr = new String[7] { "房屋照片", "房屋所有权证& ...
- Silverlight获取WebHost配置信息--WebClient和XmlSerializer模拟
在我们的silverlight项目中,是被打包为xap zip文件下载到客户端,所以silverlight中的app配置文件我们不能直接修改,而在其宿主web host中的web.config在服务端 ...
- Silverlight 2.5D RPG游戏技巧与特效处理:(十六)动态资源
即开即玩是网页游戏相比传统客户端游戏的最大优势.如果说在每台电脑安装上G的客户端是一种资源浪费及时间污染:那么Silverlight作为RIA界的新宠儿,在继承祖辈优秀血统的前提下拥有更加卓越的性能及 ...
- Silverlight:Downloader的使用(event篇)
(1)Downloader的使用 首先我们看什么是Downloader,就是一个为描述Silverlight plug-in下载功能的集合.Downloader能异步的通过HTTP GET Reque ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(06月06日-06月11日)
Windows 8预览版推出后,Silverlight社区掀起一番新的"Silverlight灭亡"讨论,由于Windows 8预览版中微软重点强调HTML 5和Javascrip ...
- ArcGIS API for Silverlight部署本地地图服务
ArcGIS API for Silverlight部署本地地图服务 首先介绍下我们的开发和部署环境: 部署环境: Windows 7 旗舰版32位操作系统 IIS 6.0 开发环境: Visual ...
最新文章
- 【分享预告】细数GAN和图像分类的前世今生
- 原声php 读取excel乱码_使用PHPExcel读取Excel文件时会读出乱码
- 根据二叉树的先序和中序求后序遍历
- 过程(栈帧结构是干货)
- 今天,我要教妹子学会Spring:Aware、异步编程、计划任务
- Bootstrap 组件之 Nav
- 单片机六位抢答器c语言程序,八路电子抢答器(基于51单片机的8路抢答器设计C语言程序)...
- vue父子组件的传值
- 猿编程python代码_猿编程怎么练习编程 让你提前熟悉代码
- xy苹果助手安装_xy苹果助手
- web前端入坑第二篇:web前端到底怎么学?干货资料!
- 通信子网和资源子网的区别
- 搜索引擎的博客提交入口
- 虚拟机黑苹果连接本地服务器错误,虚拟机装黑苹果遇问题。。。
- BH1750光照传感器
- 计算机网络 有效数据率,在计算机网络中,表征数据传输有效性的指标是( ) A.误码率 B.频带利用率 C.信道容量 D.传输速率...
- Apache的Order Allow,Deny 配置详解
- 【脑电数据处理】electrophysiology and EEG(AP\LFP\ECoG\EEG)
- 计算机软件总体上分为,计算机软件分为哪两大类?它们各自的作用是什么?
- 大白菜U盘安装win10操作系统
热门文章
- 2023年下半年 系统集成项目管理工程师 真题考点(一二三四五六批次)(10月28、29。11月4、5)(网友回忆版)
- CTF中常见的几种编码
- Python OS模块 os.chdir(path) and os.getcwd()
- 三联刷屏案例复盘:6个原因成就「三联红」刷屏
- 是谁在我的心里打了个结(二十五)圈套
- 毕业设计 基于51单片机的车位引导智能停车场管理系统
- 多多挣钱,多多攒钱。
- AI生成文章二开版本来袭,需要的小伙伴进来看看
- android bootload漏洞,利用漏洞解锁锤子T1/2手机的bootloader
- 各大N F T平台纷纷改名,其商机本质分析分析