asp.net BackgroundWorker之在后台下载文件
2011-12-23 00:00
666 查看
示例:
下面的代码示例演示如何使用 BackgroundWorker 组件从 URL 加载 XML 文件。用户单击“下载”按钮时,Click 事件处理程序将调用 BackgroundWorker 组件的 RunWorkerAsync 方法来启动下载操作。在下载过程中,将禁用该按钮,然后在下载完成后再启用该按钮。MessageBox 将显示文件的内容。
下载文件:
文件下载在 BackgroundWorker 组件的辅助线程上进行,该线程运行 DoWork 事件处理程序。当代码调用 RunWorkerAsync 方法时,将启动此线程。
等待 BackgroundWorker 完成
dowloadButton_Click 事件处理程序演示如何等待 BackgroundWorker 组件完成它的异步任务。使用 IsBusy 属性可以确定 BackgroundWorker 线程是否仍在运行。如果代码在主 UI 线程上(对于 Click 事件处理程序即是如此),请务必调用 Application.DoEvents 方法以使用户界面能够响应用户操作。
显示结果
backgroundWorker1_RunWorkerCompleted 方法将处理 RunWorkerCompleted 事件,并在后台操作完成后被调用。它首先检查 AsyncCompletedEventArgs.Error 属性,如果该属性是 null,它将显示文件内容。
下面的代码示例演示如何使用 BackgroundWorker 组件从 URL 加载 XML 文件。用户单击“下载”按钮时,Click 事件处理程序将调用 BackgroundWorker 组件的 RunWorkerAsync 方法来启动下载操作。在下载过程中,将禁用该按钮,然后在下载完成后再启用该按钮。MessageBox 将显示文件的内容。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Threading; using System.Windows.Forms; using System.Xml; public class Form1 : Form { private BackgroundWorker backgroundWorker1; private Button dowloadButton; private XmlDocument document = null; public Form1() { InitializeComponent(); } private void dowloadButton_Click(object sender, EventArgs e) { // Start the download operation in the background. this.backgroundWorker1.RunWorkerAsync(); // Disable the button for the duration of the download. this.dowloadButton.Enabled = false; // Wait for the BackgroundWorker to finish the download. while (this.backgroundWorker1.IsBusy) { // Keep UI messages moving, so the form remains // responsive during the asynchronous operation. Application.DoEvents(); } // The download is done, so enable the button. this.dowloadButton.Enabled = true; } private void backgroundWorker1_DoWork( object sender, DoWorkEventArgs e) { document = new XmlDocument(); // Replace this file name with a valid file name. document.Load(@"http://www.tailspintoys.com/sample.xml"); // Uncomment the following line to // simulate a noticeable latency. //Thread.Sleep(5000); } private void backgroundWorker1_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e) { if (e.Error == null) { MessageBox.Show(document.InnerXml, "Download Complete"); } else { MessageBox.Show( "Failed to download file", "Download failed", MessageBoxButtons.OK, MessageBoxIcon.Error ); } } /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); this.dowloadButton = new System.Windows.Forms.Button(); this.SuspendLayout(); // // backgroundWorker1 // this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted); // // dowloadButton // this.dowloadButton.Location = new System.Drawing.Point(12, 12); this.dowloadButton.Name = "dowloadButton"; this.dowloadButton.Size = new System.Drawing.Size(75, 23); this.dowloadButton.TabIndex = 0; this.dowloadButton.Text = "Download file"; this.dowloadButton.UseVisualStyleBackColor = true; this.dowloadButton.Click += new System.EventHandler(this.dowloadButton_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(104, 54); this.Controls.Add(this.dowloadButton); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion } static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
下载文件:
文件下载在 BackgroundWorker 组件的辅助线程上进行,该线程运行 DoWork 事件处理程序。当代码调用 RunWorkerAsync 方法时,将启动此线程。
private void backgroundWorker1_DoWork( object sender, DoWorkEventArgs e) { document = new XmlDocument(); // Replace this file name with a valid file name. document.Load(@"http://www.tailspintoys.com/sample.xml"); // Uncomment the following line to // simulate a noticeable latency. //Thread.Sleep(5000); }
等待 BackgroundWorker 完成
dowloadButton_Click 事件处理程序演示如何等待 BackgroundWorker 组件完成它的异步任务。使用 IsBusy 属性可以确定 BackgroundWorker 线程是否仍在运行。如果代码在主 UI 线程上(对于 Click 事件处理程序即是如此),请务必调用 Application.DoEvents 方法以使用户界面能够响应用户操作。
private void dowloadButton_Click(object sender, EventArgs e) { // Start the download operation in the background. this.backgroundWorker1.RunWorkerAsync(); // Disable the button for the duration of the download. this.dowloadButton.Enabled = false; // Wait for the BackgroundWorker to finish the download. while (this.backgroundWorker1.IsBusy) { // Keep UI messages moving, so the form remains // responsive during the asynchronous operation. Application.DoEvents(); } // The download is done, so enable the button. this.dowloadButton.Enabled = true; }
显示结果
backgroundWorker1_RunWorkerCompleted 方法将处理 RunWorkerCompleted 事件,并在后台操作完成后被调用。它首先检查 AsyncCompletedEventArgs.Error 属性,如果该属性是 null,它将显示文件内容。
private void backgroundWorker1_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e) { if (e.Error == null) { MessageBox.Show(document.InnerXml, "Download Complete"); } else { MessageBox.Show( "Failed to download file", "Download failed", MessageBoxButtons.OK, MessageBoxIcon.Error ); } }
相关文章推荐
- JQuery按照form下载文件+后台asp.net,非ajax(上)
- asp.net C#后台实现下载文件的几种方法
- asp.net 下载任意格式文件 上传文件后台代码
- asp.net后台下载文件(解决中文乱码)
- JQuery按照form下载文件+后台asp.net,非ajax(下)
- asp.net常用的一个很好用的控制文件下载的函数 支持续传多线(控制多线请自行修改)
- 用C#(ASP.NET)怎么实现文件下载功能
- 基于ASP.NET Webapi和ajax技术且兼容Chrome、Firefox和IE浏览器的Excel文件下载方法
- asp.net返回值当文件下载问题
- asp.net中实现文件下载功能
- ASP.NET中实现文件下载功能
- 下载文件 asp.net
- asp.net 禁止目录下某一种程序被执行或目录下文件被下载
- ASP.NET下载文件的代码
- Asp.net下载文件的实例
- 在ASP.NET中实现压缩多个文件为.zip文件,实现批量下载功能
- 文件下载Asp.net下载文件的实例
- Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)
- asp.net实现文件下载的代码