c# BackgroundWorker控件使用方法
来源:互联网 发布:淘宝店铺号是什么 编辑:程序博客网 时间:2024/05/17 22:00
在使用之前先了解一些知識。
1、BackgroundWorker作用:
主要用在單獨的線程上執行操作。BackgroundWorker类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker类方便地解决问题。
2、BackgroundWorker常用屬性:
名稱 | 說明 |
CancellationPending | 指示應用程式是否已請求取消後台操作即(是否正在停止中)。 |
IsBusy | 獲取一個值,指示 BackgroundWorker 是否正在運行非同步操作。 |
WorkerReportsProgress | 該值指示 BackgroundWorker 能否報告進度更新。 |
WorkerSupportsCancellation | 該值指示 BackgroundWorker 是否支援非同步取消。 |
3、BackgroundWorker常用事件:
控制項 | 名稱 | 說明 |
TextBox | txtSelect | 用於顯示被選擇文件的路徑 |
Button | btnSelectFile | 用於選擇文件 |
TextBox | txtResult | 用於顯示後台程式執行的結果 |
ProgressBar | pgbValue | 用於顯示背景程式執行的結果 |
Button | btnRun | 用於執行背景程式 |
Button | btnCancel | 用於取消正在執行的背景程式 |
BackgroundWorker | bgwWorker | 用於後台運行程式 |
4、注意:
運行RunWorkerAsync()方法會觸發DoWork事件
運行ReportProgress()方法會觸發ProgressChanged事件
5、使用過程:
5.1 在窗體中加入控件
5.2 加入BackgroundWorker的事件
5.3 在DoWork事件的方法中調用需要執行的方法
5.4 在ProgressChanged事件的方法中顯示進度
5.5 在RunWorkerCompleted事件的方法中顯示被執行方法的結果
6、代碼:
6.1 代碼中的控件說明:
控件 | 名稱 | 說明 |
TextBox | txtSelect | 用於顯示被選擇文件的路徑 |
Button | btnSelectFile | 用於選擇文件 |
TextBox | txtResult | 用於顯示後台程序執行的結果 |
ProgressBar | pgbValue | 用於顯示背景程序執行的結果 |
Button | btnRun | 用於執行背景程序 |
Button | btnCancel | 用於取消正在執行的背景程序 |
6.2代碼(下面代碼作用是將文件轉成swf):
using System.IO;
namespace BackgroundWorkerDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//“執行背景程序”按鈕事件
btnRun.Click += new EventHandler(btnRun_Click);
//“取消背景程序”按鈕事件
btnCancel.Click += new EventHandler(btnCancel_Click);
//是否允許BackgroundWorker 能否报告进度
bgwWorker.WorkerReportsProgress = true;
//選擇文件按鈕方法
btnSelectFile.Click += new EventHandler(btnSelectFile_Click);
//5.2
//开始执行后台操作時
//当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递DoWorkEventArgs参数;
bgwWorker.DoWork += new DoWorkEventHandler(bgwWorker_DoWork);
//引发 ProgressChanged 事件。 ProgressChanged是负责报告当前程序进度
bgwWorker.ProgressChanged += new ProgressChangedEventHandler(bgwWorker_ProgressChanged);
//当后台操作已完成、被取消或引发异常时发生。
bgwWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwWorker_RunWorkerCompleted);
}
/// <summary>
/// 被選擇的文件
/// </summary>
string sFile = "";
/// <summary>
/// ProgressBar的值
/// </summary>
int iProgressValue = 1;
String fs_filename = "";
/// <summary>
/// 得到轉換后文件在服務器的絕對路徑
/// </summary>
String fs_convertedfilename = "";
/// <summary>
/// 得到選項選擇的結果(0為瀏覽)
/// </summary>
int interfaceOptions = 0;
/// <summary>
/// 選擇文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void btnSelectFile_Click(object sender, EventArgs e)
{
//選擇文件
OpenFileDialog ofdDialog = new OpenFileDialog();
if (ofdDialog.ShowDialog()==DialogResult.OK)
{
sFile = ofdDialog.FileName;
string sFilePathName = Path.GetDirectoryName(sFile) +"//"+ Path.GetFileNameWithoutExtension(sFile);
txtSelect.Text = sFile;
fs_filename = sFile;
//得到轉換后的文件名
fs_convertedfilename = sFilePathName + ".swf";
}
}
/// <summary>
/// “執行背景程序”按鈕事件的方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void btnRun_Click(object sender, EventArgs e)
{
string sFile = "";
//开始执行任务,會触发DoWork事件
bgwWorker.RunWorkerAsync(sFile);
}
/// <summary>
/// “取消背景程序”按鈕事件的方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void btnCancel_Click(object sender, EventArgs e)
{
if (bgwWorker.IsBusy)
{
//取消操作
bgwWorker.CancelAsync();
txtResult.Text += "已取消";
}
}
/// <summary>
/// 开始执行后台操作時
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgwWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bgwValue = (BackgroundWorker)sender;
//報告進度(進度值需自己傳入)
bgwWorker.ReportProgress(iProgressValue);
//5.3
//運行需要運行的方法。
RunPrint2Falsh();
if ( RunPrint2Falsh()==true)
{
bgwWorker.ReportProgress(100);
}
}
/// <summary>
/// 背景程序进度方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgwWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//5.4
//設置ProgressBar設
pgbValue.Value = e.ProgressPercentage;
}
/// <summary>
/// 背景程序運行完成事件方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgwWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//5.5
txtResult.Text += "完成!";
}
/// <summary>
/// 運行將文件轉換成Flash程序(此處引用了Print2Flash控件)
/// </summary>
/// <returns></returns>
private bool RunPrint2Falsh()
{
bool sRetrun = false;
try
{
P2F.Server2 p2fServer = new P2F.Server2();
p2fServer.DefaultProfile.InterfaceOptions = interfaceOptions;
p2fServer.ConvertFile(fs_filename, fs_convertedfilename, null, null, null);
sRetrun = true;
}
catch (Exception ex)
{
throw ex;
}
return sRetrun;
}
}
}
- c# BackgroundWorker控件使用方法
- c# BackgroundWorker控件使用方法
- c# BackgroundWorker控件使用方法
- c# BackgroundWorker控件使用方法
- C#后台运行控件BackgroundWorker的使用方法
- BackgroundWorker控件使用方法
- C# BackgroundWorker 的使用方法
- C# backgroundworker 控件使用
- c#中BackGroundWorker控件
- C#中的BackgroundWorker控件
- C#中的BackgroundWorker控件
- C#中的BackgroundWorker控件
- C#之--多线程控件BackgroundWorker
- 【转载于百度空间】C# WinForm中的BackgroundWorker控件的使用方法
- 非常实用的C# backgroundworker使用方法
- 非常实用的C# backgroundworker使用方法
- BackgroundWorker使用方法样例介绍 C#
- 非常实用的C# backgroundworker使用方法
- jquery基本操作
- java里面的Microsoft.XMLHTTP对象httpClient对象
- 水立方是高级场馆,人立方同样
- C#网络编程个人理解UDP&amp;TCP
- MDAC (Microsoft Data Access Components)简介
- c# BackgroundWorker控件使用方法
- C#时间函数的用法 时间格式输出
- Iframe自动适应高度
- RSS阅读排序与过滤的7种方式
- 职场经验
- C#多线程变成传递参数解决方案
- 嵌入式以太网控制芯片
- Hibernate主键生成方式 Key
- DataView数据视图实现数据过滤,排序