在進(jìn)行操作的時(shí)候,程序會(huì)進(jìn)入假死狀態(tài).數(shù)據(jù)少的時(shí)候還好,數(shù)據(jù)一多耗時(shí)過長很影響使用的體驗(yàn),所以使用backgroundWorker類,將與數(shù)據(jù)庫相關(guān)的耗時(shí)較長的操作放在Dowork事件處理程序中,進(jìn)行操作的時(shí)候,用戶也通過ProgressChanged和RunWorkerCompleted事件與用戶界面進(jìn)行通信。
- 從工具箱拖取backgroundWorker組件
- 在button的click事件加入RunWorkerAsync
private void button3_Click(object sender, EventArgs e)
{
OracleConnection conn = OracleConn(PublicValue.str);
//調(diào)用backgroundWorker1的RunWorkerAsync方法,用來引發(fā)DoWork事件
backgroundWorker1.RunWorkerAsync(PublicValue.FilePath1);
- 編輯DoWork事件代碼
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//e.Argument為RunWorkerAsync(arg);對應(yīng)的參數(shù)
BackgroundWorker bw = (BackgroundWorker)sender;
String path = e.Argument.ToString();
工作代碼
}
- 編輯ProgressChanged事件代碼
- 編輯RunWorkerCompleted事件代碼
//必須放在Form里否則無法調(diào)取
public Form1()
{
InitializeComponent();
//工作線程回調(diào),將要執(zhí)行的代碼放在此函數(shù)里
this.backgroundWorker1.DoWork += backgroundWorker1_DoWork;
//當(dāng)進(jìn)度改變時(shí)回調(diào)
this.backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
//當(dāng)完成時(shí)回調(diào)
this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
//此屬性必須設(shè)置,否則讀取不到進(jìn)度
this.backgroundWorker1.WorkerReportsProgress = true;
}