在Silverlight應用中,我們可能會遇到一些操作(如:下載下傳某個資源或某些資料庫事務或完成某些特定動作),這些操作耗時較長,容易造成“使用者界面停止響應”的現象。如果您需要能進行響應的使用者界面,而且必須執行耗時操作,則可以使用 BackgroundWorker 類友善地解決問題。 BackgroundWorker 類是.net 2.0裡新增的一個類。 使用 BackgroundWorker 類,我們可以在 Silverlight 使用者界面中訓示操作進度、完成和取消情況。例如,可以檢視背景操作是已完成還是已取消并為使用者顯示消息。
一、BackgroundWorker類的基本了解
涉及的命名空間
using System.ComponentModel;
它的幾個屬性:
CancellationPending——訓示應用程式是否已請求取消背景操作。
IsBusy——訓示 BackgroundWorker 是否正在運作異步操作
WorkerReportsProgress——該值訓示 BackgroundWorker 能否報告進度更新
WorkerSupportsCancellation——該值訓示 BackgroundWorker 是否支援異步取消
它的主要事件:
DoWork——調用 RunWorkerAsync 時發生。 注意確定在 DoWork 事件處理程式中不操作任何使用者界面對象。而應該通過 ProgressChanged 和 RunWorkerCompleted 事件與使用者界面進行通信。
ProgressChanged——調用 ReportProgress 時發生。
RunWorkerCompleted——當背景操作已完成、被取消或引發異常時發生。
它的有關方法:
CancelAsync——請求取消挂起的背景操作
ReportProgress——引發 ProgressChanged 事件
RunWorkerAsync——開始執行背景操作
二、示例
下面,我們就使用這個類來完成一個特定操作:
用于執行從1累加到6.在累加過程中,SUM值會不斷更新,當累加到6後,BackgroundWorker會在成功執行結束後調用一段程式來輸出最終的運作資訊。
建立一個名為:SLBackgroundWorker的Silverlight應用程式,如圖:
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 1、建立使用者界面:
Page.xaml代碼如下:
< UserControl x:Class = " SLBackgroundWorker.Page "
xmlns = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "
xmlns:x = " http://schemas.microsoft.com/winfx/2006/xaml "
Width = " 400 " Height = " 350 " >
< Grid x:Name = " LayoutRoot " Background = " White " >
< StackPanel Orientation = " Vertical " Width = " 400 " Height = " 350 " Background = " Yellow " >
< TextBlock x:Name = " txtDisplay " FontSize = " 24 " TextAlignment = " Center " Margin = " 10 " Text = " 目前無内容 " Height = " 100 " />
< Button x:Name = " btnRun " Content = " 從1到6累加 " Click = " OnRun " Margin = " 10 " Height = " 50 " />
< Button x:Name = " btnCancel " Content = " 取 消 " Click = " OnCancel " Margin = " 10 " Height = " 50 " />
< TextBlock x:Name = " txtUserState " FontSize = " 12 " TextAlignment = " Center " Text = " 顯示ReportProgress方法傳回的userState值 " />
< TextBlock x:Name = " txtEdoArgs " FontSize = " 12 " TextAlignment = " Center " Text = " 顯示RunWorkerAsync()方法調用時傳入的參數 " />
</ StackPanel >
</ Grid >
</ UserControl >
效果如下圖
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 2、使用BackgroundWorker類
在此我們分四個步驟來操作
2.1、聲明一個BackgroundWorker類執行個體:若要在背景運作操作,請建立一個 BackgroundWorker。可以偵聽報告操作進度并在操作完成時發出信号的事件。
worker = new System.ComponentModel.BackgroundWorker();
2.2、相關事件的定義
若要設定背景操作,請為 DoWork 事件添加事件處理程式,在此事件處理程式中調用耗時的操作。
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 Code
#region 目前BackgroundWorker所執行操作
private void OnDoWork(object sender,DoWorkEventArgs e)
{
//DoWorkEventArgs.Argument - RunWorkerAsync(object argument)傳遞過來的參數
//DoWorkEventArgs.Cancel - 取消操作
//DoWorkEventArgs.Result - 操作的結果。将傳遞到 RunWorkerCompleted 所指定的方法
//BackgroundWorker.ReportProgress(int percentProgress, object userState) - 向 ProgressChanged 彙報操作的完成進度
// int percentProgress - 操作完成的百分比 1% - 100%
// object userState - 傳遞到 ProgressChanged 的參數
//擷取在 worker.RunWorkerAsync()方法中傳來的參數
//在此處,我們把它指派給了一個全局變量,并在OnProgressChanged過程中顯示出來
eStrAll = e.Argument.ToString();
int Value = 0;
//如果Value還沒有加到6,并且應用程式還沒有請求取消背景操作,則繼續本循環
while (Value <= 6 && !worker.CancellationPending)
{
Thread.Sleep(1000); //挂起1秒鐘
Value++;
#region 調用方法一:不傳遞UserState值
worker.ReportProgress(Value);
#endregion
#region 調用方法一:要傳遞UserState值
// worker.ReportProgress(Value, "傳來的UserState值 " + Value.ToString()); //此處還可以傳遞userState(狀态對象)到RunWorkerAsync,并在OnProgressChanged中擷取
#endregion
}
//如果應用程式請求取消背景操作,則取消
if (worker.CancellationPending)
{
e.Cancel = true;
}
#region 可以在此處設定e.Result的值,并在OnWorkCompleted事件中擷取它的值
e.Result = "操作已完成";
#endregion
}
#endregion
若要收到進度更新的通知,請處理 ProgressChanged 事件。
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 Code
#region 異步操作進度事件
private void OnProgressChanged(object sender, ProgressChangedEventArgs e)
{
// ProgressChangedEventArgs.ProgressPercentage - ReportProgress 傳遞過來的操作完成的百分比
// ProgressChangedEventArgs.UserState - ReportProgress 傳遞過來的參數
txtDisplay.Text = e.ProgressPercentage.ToString(); //顯示目前進度
#region 如果在OnDoWork中使用的是調用方法二,則在此可擷取e.UserState值
//在此處擷取從OnDoWork中的 worker.ReportProgress方法傳回的userState值
//txtUserState.Text = e.UserState.ToString();
#endregion
#region 顯示RunWorkerAsync()方法調用時傳入的參數
this.txtEdoArgs.Text = eStrAll;
#endregion
}
#endregion
若要在操作完成時收到通知,請處理 RunWorkerCompleted 事件。
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 Code
#region 操作成功完成時的處理事件
private void OnWorkCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//RunWorkerCompletedEventArgs.Error - DoWork 時産生的錯誤
//RunWorkerCompletedEventArgs.Cancelled - 背景操作是否已被取消
//RunWorkerCompletedEventArgs.Result - DoWork 的結果
#region 進行完成時的相關判斷與處理
if (e.Error !=null)
{
txtDisplay.Text = "調用失敗";
}
else
{
if(e.Cancelled)
{
txtDisplay.Text = "已經取消本次操作!";
}
else
{
txtDisplay.Text = e.Result.ToString();// 可以在此處擷取e.Result的值(它的值在OnDoWork中進行了設定)
}
}
#endregion
}
#endregion
若要 取消異步操作,則使用CancelAsync方法。
#region 取消異步操作
private void OnCancel( object sender, RoutedEventArgs e)
{
// 取消異步操作
worker.CancelAsync();
}
#endregion
2.3、相關事件的綁定和操作設定
#region 步驟二:相關事件的定義、綁定和操作設定
// 目前BackgroundWorker所執行的操作
worker.DoWork += OnDoWork;
// 綁定異步操作進度的事件
worker.ProgressChanged += OnProgressChanged;
// 綁定操作成功完成的處理事件
worker.RunWorkerCompleted += OnWorkCompleted;
// 是否報告進度更新
worker.WorkerReportsProgress = true ;
// 是否支援異步取消
worker.WorkerSupportsCancellation = true ;
#endregion
2.4、開始執行背景操作
若要啟動背景操作,請調用 RunWorkerAsync 方法。
#region 步驟三:開始執行背景操作
// IsBusy - 指定的 BackgroundWorker 是否正在背景操作
// RunWorkerAsync(object argument) - 開始在背景線程執行指定的操作
// object argument - 需要傳遞到 DoWork 的參數
if ( ! worker.IsBusy)
worker.RunWorkerAsync( " 方法RunWorkerAsync調用時傳遞的參數 " );
#endregion
Page.xaml.cs全部代碼如下:
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Collections.Generic;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Linq;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Net;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Windows;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Windows.Controls;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Windows.Documents;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Windows.Input;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Windows.Media;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Windows.Media.Animation;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Windows.Shapes;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.ComponentModel; // 必須要引入此命名空間才能使用BackgroundWorker類
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 using System.Threading; // 必須要引入此命名空間才能執行 Sleep(1000)挂起1秒鐘操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 namespace SLBackgroundWorker
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 public partial class Page : UserControl
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 private BackgroundWorker worker;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 string eStrAll = ""; //用于儲存調用RunWorkerAsync()方法時的傳參,此傳參在OnDoWork()方法中截取到
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 public Page()
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 InitializeComponent();
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 private void OnRun(object sender, RoutedEventArgs e)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 步驟一:聲明一個BackgroundWorker類執行個體#region 步驟一:聲明一個BackgroundWorker類執行個體
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker =new System.ComponentModel.BackgroundWorker();
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 步驟二:相關事件的定義、綁定和操作設定#region 步驟二:相關事件的定義、綁定和操作設定
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //目前BackgroundWorker所執行的操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker.DoWork += OnDoWork;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //綁定異步操作進度的事件
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker.ProgressChanged += OnProgressChanged;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //綁定操作成功完成的處理事件
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker.RunWorkerCompleted += OnWorkCompleted;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //是否報告進度更新
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker.WorkerReportsProgress = true;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //是否支援異步取消
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker.WorkerSupportsCancellation = true;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 步驟三:開始執行背景操作#region 步驟三:開始執行背景操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 // IsBusy - 指定的 BackgroundWorker 是否正在背景操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 // RunWorkerAsync(object argument) - 開始在背景線程執行指定的操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 // object argument - 需要傳遞到 DoWork 的參數
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 if (!worker.IsBusy)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker.RunWorkerAsync("方法RunWorkerAsync調用時傳遞的參數");
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 目前BackgroundWorker所執行操作#region 目前BackgroundWorker所執行操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 private void OnDoWork(object sender,DoWorkEventArgs e)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //DoWorkEventArgs.Argument - RunWorkerAsync(object argument)傳遞過來的參數
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //DoWorkEventArgs.Cancel - 取消操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //DoWorkEventArgs.Result - 操作的結果。将傳遞到 RunWorkerCompleted 所指定的方法
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //BackgroundWorker.ReportProgress(int percentProgress, object userState) - 向 ProgressChanged 彙報操作的完成進度
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 // int percentProgress - 操作完成的百分比 1% - 100%
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 // object userState - 傳遞到 ProgressChanged 的參數
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //擷取在 worker.RunWorkerAsync()方法中傳來的參數
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //在此處,我們把它指派給了一個全局變量,并在OnProgressChanged過程中顯示出來
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 eStrAll = e.Argument.ToString();
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 int Value = 0;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //如果Value還沒有加到6,并且應用程式還沒有請求取消背景操作,則繼續本循環
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 while (Value <= 6 && !worker.CancellationPending)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 Thread.Sleep(1000); //挂起1秒鐘
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 Value++;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 調用方法一:不傳遞UserState值#region 調用方法一:不傳遞UserState值
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker.ReportProgress(Value);
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 調用方法一:要傳遞UserState值#region 調用方法一:要傳遞UserState值
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 // worker.ReportProgress(Value, "傳來的UserState值 " + Value.ToString()); //此處還可以傳遞userState(狀态對象)到RunWorkerAsync,并在OnProgressChanged中擷取
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //如果應用程式請求取消背景操作,則取消
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 if (worker.CancellationPending)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 e.Cancel = true;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 可以在此處設定e.Result的值,并在OnWorkCompleted事件中擷取它的值#region 可以在此處設定e.Result的值,并在OnWorkCompleted事件中擷取它的值
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 e.Result = "操作已完成";
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 異步操作進度事件#region 異步操作進度事件
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 private void OnProgressChanged(object sender, ProgressChangedEventArgs e)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 // ProgressChangedEventArgs.ProgressPercentage - ReportProgress 傳遞過來的操作完成的百分比
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 // ProgressChangedEventArgs.UserState - ReportProgress 傳遞過來的參數
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 txtDisplay.Text = e.ProgressPercentage.ToString(); //顯示目前進度
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 如果在OnDoWork中使用的是調用方法二,則在此可擷取e.UserState值#region 如果在OnDoWork中使用的是調用方法二,則在此可擷取e.UserState值
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //在此處擷取從OnDoWork中的 worker.ReportProgress方法傳回的userState值
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //txtUserState.Text = e.UserState.ToString();
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 顯示RunWorkerAsync()方法調用時傳入的參數#region 顯示RunWorkerAsync()方法調用時傳入的參數
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 this.txtEdoArgs.Text = eStrAll;
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 操作成功完成時的處理事件#region 操作成功完成時的處理事件
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 private void OnWorkCompleted(object sender, RunWorkerCompletedEventArgs e)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //RunWorkerCompletedEventArgs.Error - DoWork 時産生的錯誤
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //RunWorkerCompletedEventArgs.Cancelled - 背景操作是否已被取消
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //RunWorkerCompletedEventArgs.Result - DoWork 的結果
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 進行完成時的相關判斷與處理#region 進行完成時的相關判斷與處理
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 if (e.Error !=null)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 txtDisplay.Text = "調用失敗";
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 else
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 if(e.Cancelled)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 txtDisplay.Text = "已經取消本次操作!";
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 else
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 txtDisplay.Text = e.Result.ToString();// 可以在此處擷取e.Result的值(它的值在OnDoWork中進行了設定)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 取消異步操作#region 取消異步操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 private void OnCancel(object sender, RoutedEventArgs e)
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 {
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 //取消異步操作
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 worker.CancelAsync();
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 #endregion
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 }
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 運作效果如下:
SilverLight學習筆記--Silverligh之BackgroundWorker類的應用 說明:
1、您必須非常小心,確定在 DoWork 事件處理程式中不操作任何使用者界面對象。而應該通過 ProgressChanged 和 RunWorkerCompleted 事件與使用者界面進行通信。
2、如果背景操作需要參數,請在調用 RunWorkerAsync 時給出參數。在 DoWork 事件處理程式内部,可以從DoWorkEventArgs提取該參數。
前往:Silverlight學習筆記清單
本文程式在Silverlight2.0和VS2008環境中調試通過。本文參照了部分網絡資料,希望能夠抛磚引玉,大家共同學習。
(轉載本文請注明出處)