Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > C#/.NET技巧

asp.net BackgroundWorker之在后台下载文件

来源:中文源码网    浏览:328 次    日期:2024-03-28 02:49:54
【下载文档:  asp.net BackgroundWorker之在后台下载文件.txt 】


asp.net BackgroundWorker之在后台下载文件
示例: 下面的代码示例演示如何使用 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 ); } } /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// 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 { /// /// The main entry point for the application. /// [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 ); } }

相关内容