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文件下载相关推荐

  1. silverlight 文件下载若干方法

    方法一:WebService 前台代码: < DataTemplate > < Button Content ="下载" Height ="23&quo ...

  2. Silverlight技术研讨(1):WebClient, 文件下载利器

    对于小型的Silverlight应用程序,可以把所有内容,包括资源,都包含在一个Xap包中发布.对于开发者来说,是个很便利的选择,可以把更多的精力和时间用到程序的功能方面,提高开发效率.但是对于使用者 ...

  3. EntityFramework+DomainDataSource+Silverlight完成数据读取分页排序与修改

    关于EF.SL.DomainDataSource的说明园子上够多了,这儿就不多说了. 1.安装VS2010与Silverlight 4 Tools-- 2.打开VS2010,新键Silverlight ...

  4. 分享Silverlight/WPF/Windows Phone一周学习导读(10月30日-11月6日)

    分享Silverlight/WPF/Windows Phone一周学习导读(10月30日-11月6日) 本周Silverlight学习资源更新 Silverlight 定位 niejunhua [学习 ...

  5. silverlight 类似百度的图片浏览器,视频播放,附件下载功能,全部后台程序。...

    #region =========图片点击按钮================String[] nr = new String[7] { "房屋照片", "房屋所有权证& ...

  6. Silverlight获取WebHost配置信息--WebClient和XmlSerializer模拟

    在我们的silverlight项目中,是被打包为xap zip文件下载到客户端,所以silverlight中的app配置文件我们不能直接修改,而在其宿主web host中的web.config在服务端 ...

  7. Silverlight 2.5D RPG游戏技巧与特效处理:(十六)动态资源

    即开即玩是网页游戏相比传统客户端游戏的最大优势.如果说在每台电脑安装上G的客户端是一种资源浪费及时间污染:那么Silverlight作为RIA界的新宠儿,在继承祖辈优秀血统的前提下拥有更加卓越的性能及 ...

  8. Silverlight:Downloader的使用(event篇)

    (1)Downloader的使用 首先我们看什么是Downloader,就是一个为描述Silverlight plug-in下载功能的集合.Downloader能异步的通过HTTP GET Reque ...

  9. 分享Silverlight/WPF/Windows Phone一周学习导读(06月06日-06月11日)

    Windows 8预览版推出后,Silverlight社区掀起一番新的"Silverlight灭亡"讨论,由于Windows 8预览版中微软重点强调HTML 5和Javascrip ...

  10. ArcGIS API for Silverlight部署本地地图服务

    ArcGIS API for Silverlight部署本地地图服务 首先介绍下我们的开发和部署环境: 部署环境: Windows 7 旗舰版32位操作系统 IIS 6.0 开发环境: Visual ...

最新文章

  1. 【分享预告】细数GAN和图像分类的前世今生
  2. 原声php 读取excel乱码_使用PHPExcel读取Excel文件时会读出乱码
  3. 根据二叉树的先序和中序求后序遍历
  4. 过程(栈帧结构是干货)
  5. 今天,我要教妹子学会Spring:Aware、异步编程、计划任务
  6. Bootstrap 组件之 Nav
  7. 单片机六位抢答器c语言程序,八路电子抢答器(基于51单片机的8路抢答器设计C语言程序)...
  8. vue父子组件的传值
  9. 猿编程python代码_猿编程怎么练习编程 让你提前熟悉代码
  10. xy苹果助手安装_xy苹果助手
  11. web前端入坑第二篇:web前端到底怎么学?干货资料!
  12. 通信子网和资源子网的区别
  13. 搜索引擎的博客提交入口
  14. 虚拟机黑苹果连接本地服务器错误,虚拟机装黑苹果遇问题。。。
  15. BH1750光照传感器
  16. 计算机网络 有效数据率,在计算机网络中,表征数据传输有效性的指标是( ) A.误码率 B.频带利用率 C.信道容量 D.传输速率...
  17. Apache的Order Allow,Deny 配置详解
  18. 【脑电数据处理】electrophysiology and EEG(AP\LFP\ECoG\EEG)
  19. 计算机软件总体上分为,计算机软件分为哪两大类?它们各自的作用是什么?
  20. 大白菜U盘安装win10操作系统

热门文章

  1. 2023年下半年 系统集成项目管理工程师 真题考点(一二三四五六批次)(10月28、29。11月4、5)(网友回忆版)
  2. CTF中常见的几种编码
  3. Python OS模块 os.chdir(path) and os.getcwd()
  4. 三联刷屏案例复盘:6个原因成就「三联红」刷屏
  5. 是谁在我的心里打了个结(二十五)圈套
  6. 毕业设计 基于51单片机的车位引导智能停车场管理系统
  7. 多多挣钱,多多攒钱。
  8. AI生成文章二开版本来袭,需要的小伙伴进来看看
  9. android bootload漏洞,利用漏洞解锁锤子T1/2手机的bootloader
  10. 各大N F T平台纷纷改名,其商机本质分析分析