2013-04-25

[ASP.NET] 多執行緒的寫法

BackgroundWorker物件是個非常容易使用的多執行緒類別,可用於非同步在背後執行耗時的作業。
只要告訴它要在背後執行哪個耗時的function,然後呼叫RunWorkerAsync方法即可。
當function執行完成時,BackgroundWorker會引發RunWorkerCompleted事件,可在此事件撰寫處理完成的相關流程。

// 建立共用的BackgroundWorker物件
private BackgroundWorker bw = new BackgroundWorker();

範例如下
// 建立BackgroundWorker物件
bw = null;
bw = new BackgroundWorker();

// 指定要非同步執行的function step0_DoWork()
bw.DoWork += new DoWorkEventHandler(step0_DoWork);

// 指定非同步function執行完後, 呼叫step0_RunWorkerCompleted() 
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(step0_RunWorkerCompleted);

// 開始非同步
if (bw.IsBusy != true)
{
 bw.RunWorkerAsync();
}

//...
//在此可安排其他事項非同步繼續執行下去
//...// 要非同步執行的function
void step0_DoWork(object sender, DoWorkEventArgs e)
{
 ImportExcel();
}

// 非同步執行完成後要執行的function
void step0_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
 showLog("完成匯入.");
}

參考來源:.Net 海角點部落

沒有留言:

張貼留言