华域联盟 .Net asp.net BackgroundWorker之在后台下载文件

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 );

}

}

/// <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 );

}

}
您可能感兴趣的文章:

  • ASP.NET Web Api 2实现多文件打包并下载文件的实例
  • ASP.NET(C#) Web Api通过文件流下载文件的实例
  • ASP.NET批量下载文件的方法
  • ASP.NET 在下载文件时对其重命名的思路及实现方法
  • asp.net C#实现下载文件的六种方法实例
  • ASP.NET中下载文件的几种实例代码
  • 在ASP.NET中下载文件的实现代码
  • asp.net 下载文件时根据MIME类型自动判断保存文件的扩展名
  • asp.net 下载文件时输出文件内容
  • asp.net Web Services上传和下载文件(完整代码)
  • ASP.NET实现从服务器下载文件问题处理

本文由 华域联盟 原创撰写:华域联盟 » asp.net BackgroundWorker之在后台下载文件

转载请保留出处和原文链接:https://www.cnhackhy.com/43094.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部