自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Silverlight 3異步域操作詳解

開發(fā) 后端
Silverlight 3的異步域操作支持3種類型域操作:Query,Submit和Invoke。這些操作中的的每一種都有一個(gè)相應(yīng)的操作類型用于描述正在進(jìn)行中的異步操作。

51CTO推薦:一步一步學(xué)Silverlight

在Silverlight 3的異步域操作可謂家常便飯。因此,全面地理解異步域操作相關(guān)知識(shí)是基于RIA服務(wù)技術(shù)開發(fā)Silverlight應(yīng)用的必修課。在本文中,我們將以精簡(jiǎn)的形式剖析RIA服務(wù)編程中異步域操作中涉及的要點(diǎn)并歸納應(yīng)注意的問題。

1.Silverlight 3異步域操作

DomainContext支持3種類型域操作:Query,Submit和Invoke。這些操作中的的每一種都有一個(gè)相應(yīng)的操作類型用于描述正在進(jìn)行中的異步操作。例如,當(dāng)一個(gè)查詢加載到一個(gè)DomainContext中,異步的Load調(diào)用將立即返回一個(gè)LoadOperation實(shí)例。請(qǐng)參考如下代碼:

  1. HRContext _ctxt = new HRContext();   
  2. var query = from e in _ctxt.GetEmployeesQuery()   
  3. where e.ManagerID == 1   
  4. select e;   
  5. LoadOperation lo = _ctxt.Load(query);  

上面的操作結(jié)果既提供了有關(guān)于正在進(jìn)行的操作的動(dòng)態(tài)的可綁定的狀態(tài)信息,也提供了可取消當(dāng)前操作的支持。同樣地,一個(gè)提交請(qǐng)求將返回一個(gè)SubmitOperation,而服務(wù)操作調(diào)用將返回一個(gè)InvokeOperation。

接下來(lái),我們將詳細(xì)地討論這些Silverlight 3異步域操作及其基類有關(guān)知識(shí)。

2.基類OperationBase

這個(gè)類是所有.NET RIA服務(wù)異步操作的基類。這個(gè)類實(shí)現(xiàn)了接口INotifyPropertyChanged,因此,它的操作狀態(tài)成員可以是數(shù)據(jù)綁定型的,而且當(dāng)操作的完成狀態(tài)改變時(shí),將會(huì)引發(fā)通知。

基類OperationBase提供了如下成員:

◆IsComplete—一旦操作完成便返回true。注意,當(dāng)一項(xiàng)操作成功結(jié)束,或者是完成但仍帶有錯(cuò)誤,或者是此操作被取消,都被認(rèn)為是操作完成。

◆Completed事件—當(dāng)一項(xiàng)操作完成時(shí)引發(fā)此事件。

◆UserState—與操作相關(guān)的用戶狀態(tài)。

◆Cancel()/CanCancel/IsCanceled—如果操作能夠被取消并且沒有完成,那么CanCancel將返回true。在取消操作前,將會(huì)檢查CanCancel的值。如果操作已經(jīng)完成,則將拋出一個(gè)異常。

◆Error/HasError—如果操作已經(jīng)完成,但發(fā)生了錯(cuò)誤,那么HasError的值將為true,而且Error中將包含相應(yīng)的異常信息。

下面你將會(huì)看到,一個(gè)域操作中還可以指定一個(gè)操作完成對(duì)應(yīng)的回調(diào)函數(shù)。如果指定了一個(gè)回調(diào)函數(shù),那么,此回調(diào)函數(shù)在任何情況下也會(huì)被調(diào)用,無(wú)論此操作是成功結(jié)束,還是完成但仍帶有錯(cuò)誤,還是此操作被取消。

另外值得注意的是,這個(gè)回調(diào)函數(shù)在Completed事件引發(fā)以前也會(huì)被調(diào)用。

3.LoadOperation操作

DomainContext.Load將返回一個(gè)LoadOperation的實(shí)例。LoadOperation描述了一個(gè)正在操作中的異步加載操作。另外,此操作還提供了下面額外的狀態(tài)及功能支持:

◆Entities—一個(gè)已加載的實(shí)體的強(qiáng)類型枚舉類型。一旦調(diào)用返回,集合即變?yōu)榭?。注意,此集合?shí)現(xiàn)了接口INotifyCollectionChanged,當(dāng)操作完成時(shí)自新將得到更新。

◆AllEntities—由查詢操作加載的所有實(shí)體的集合,而且還包括任何相關(guān)聯(lián)的實(shí)體。注意,此對(duì)象也實(shí)現(xiàn)了接口INotifyCollectionChanged。一旦調(diào)用返回,集合即變?yōu)榭铡W⒁?,此?duì)象也實(shí)現(xiàn)了接口INotifyCollectionChanged,當(dāng)操作完成時(shí)自新將得到更新。

◆TotalEntityCount—返回查詢中對(duì)應(yīng)的所有服務(wù)器端實(shí)體總數(shù)。

◆EntityQuery—用于初始化加載操作。

◆MergeOption—加載操作中指定的MergeOption。

下面的代碼展示了如何指定一個(gè)加載回調(diào)函數(shù):

  1. object state =……//用戶狀態(tài)  
  2. LoadOperation lo = _ctxt.Load(query,   
  3. EmployeesLoadedCallback, state);   
  4. ……  
  5. private void EmployeesLoadedCallback(LoadOperation lo)   
  6. {   
  7. if (!lo.HasError)   
  8. {   
  9. object state = lo.UserState;   
  10. foreach (Employee employee in lo.Entities)   
  11. {   
  12. //處理已加載的實(shí)例  
  13. }   
  14. }   
  15. else   
  16. {   
  17. //處理錯(cuò)誤  
  18. }   
  19. }   
  20. 要指定一個(gè)完成事件處理器,可以像下面這樣使用LoadOperation.Completed。  
  21. object state =……//用戶狀態(tài)  
  22. LoadOperation lo = _ctxt.Load(query, null, state);   
  23. lo.Completed += this.OnEmployeesLoaded;   
  24. ……  
  25. private void OnEmployeesLoaded(object sender, EventArgs e)   
  26. {   
  27. LoadOperation lo = (LoadOperation)sender;   
  28. ……  

當(dāng)有許多方面(可能是外面的)對(duì)當(dāng)前操作進(jìn)度感興趣時(shí),那么上面的事件處理器創(chuàng)建是非常有用的。

4.SubmitOperation操作

DomainContext.SubmitChanges方法將返回一個(gè)SubmitOperation的實(shí)例。其中,SubmitOperation代表了正在進(jìn)行的異步提交操作;此外,DomainContext.SubmitChanges方法還提供了下面額外的狀態(tài)及功能支持:

◆ChangeSet—正在提交的EntityChangeSet

◆EntitiesInError—對(duì)于一個(gè)產(chǎn)生校驗(yàn)或沖突錯(cuò)誤的提交操作來(lái)說(shuō),它代表了產(chǎn)生錯(cuò)誤的實(shí)體的集合。
另外,回調(diào)函數(shù)及Completed事件的提交與前面解釋的LoadOperation中的使用方式一致,在此不再贅述。

六、InvokeOperation操作

當(dāng)調(diào)用一個(gè)ServiceOperation(服務(wù)操作)時(shí),將返回一個(gè)強(qiáng)類型的InvokeOperation。這里,T是ServiceOperation操作的返回類型。歸納來(lái)看,InvokeOperation操作提供了下面額外的狀態(tài)及功能支持:

◆OperationName—要調(diào)用的操作的名字

◆Parameters—要操作的名字/值形式的字典參數(shù)

◆ValidationErrors—當(dāng)調(diào)用失敗時(shí)對(duì)應(yīng)的檢驗(yàn)錯(cuò)誤信息的集合

◆Value—ServiceOperation返回的值

另外,回調(diào)函數(shù)及Completed事件的提交與前面解釋的LoadOperation中的使用方式一致,在此不再贅述。

5.小結(jié)

本文簡(jiǎn)要地總結(jié)了RIA服務(wù)開發(fā)中Silverlight 3異步域操作支持的3種類型的重要的域操作:Query,Submit和Invoke。其中的每一種操作都有一個(gè)相應(yīng)的操作類型用于描述正在進(jìn)行中的異步操作。我們對(duì)這些RIA服務(wù)操作使用參數(shù)、注意事項(xiàng)及使用場(chǎng)景等進(jìn)行了歸納,并給出片斷代碼例證。

【編輯推薦】

  1. Office 2010將使用Silverlight改善用戶體驗(yàn)
  2. 微軟.NET平臺(tái)主管談Silverlight企業(yè)級(jí)開發(fā)
  3. Flash與Silverlight多領(lǐng)域?qū)崪y(cè)對(duì)比
  4. 微軟宣稱Silverlight裝機(jī)量超過三億
  5. 圖解Silverlight 3的7個(gè)新功能
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-07-24 18:03:44

2010-01-04 10:17:16

Silverlight

2009-09-07 15:25:24

MySQL數(shù)據(jù)庫(kù)互操作Silverlight

2010-01-04 16:50:04

Silverlight

2009-09-07 13:25:56

Silverlight

2009-11-18 11:33:23

Silverlight

2011-11-22 09:32:39

ASP.NET

2009-04-23 10:08:03

Silverlight兼容開發(fā)

2009-02-02 10:53:34

SilverlightSilverlightRIA

2009-12-31 10:07:08

Silverlight

2009-12-31 16:56:40

Silverlight

2010-01-04 13:15:33

跨域引用Silverl

2009-12-31 15:01:07

Silverlight

2010-01-04 16:17:50

Silverlight

2011-08-30 10:20:41

Silverlight

2010-01-04 18:33:39

Silverlight

2009-12-29 17:25:36

Silverlight

2009-02-20 08:54:20

DownloaderSilverlight對(duì)象

2024-05-20 09:28:44

Spring客戶端瀏覽器

2009-09-27 10:03:53

Silverlight
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)