[英]Silverlight 4 + RIA Service Loads
使用相同的“加載操作”加載多個實體,然后將其異步綁定到單個事件處理程序,是否可以接受? 之所以這樣做,是因為我使用的是忙碌指標,我們實際上並不知道哪個實體會更快地返回。
還是應該將負載分為多個“負載操作/事件處理程序”對?
LoadOperation GetResult;
private void LoadinDatagrid()
{
IsBusy = true;
GetResult = DomainContext.Current.Load(GetSomething1Query());
GetResult = DomainContext.Current.Load(GetSomething2Query());
GetResult = DomainContext.Current.Load(GetSomething3Query());
GetResult.Completed += new EventHandler(GetResult_Completed);
}
void GetResult_Completed(object sender, EventArgs e)
{
GetSomething1 = DomainContext.Current.Something1;
GetSomething2 = DomainContext.Current.Something2;
GetSomething3 = DomainContext.Current.Something3;
GetResult.Completed -= new EventHandler(GetResult_Completed);
IsBusy = false;
}
LoadOperation GetResult;
private void LoadinDatagrid()
{
IsBusy = true;
GetResult.Completed += new EventHandler(GetResult_Completed);
GetResult = DomainContext.Current.Load(GetSomething1Query());
GetResult = DomainContext.Current.Load(GetSomething2Query());
GetResult = DomainContext.Current.Load(GetSomething3Query());
}
void GetResult_Completed(object sender, EventArgs e)
{
if(e.result!=null){
if(e.result.x=="GetSomething1")
GetSomething1 = DomainContext.Current.Something1;
else if(e.result.x=="GetSomething2")
GetSomething2 = DomainContext.Current.Something2;
else if(e.result.x=="GetSomething3")
GetSomething3 = DomainContext.Current.Something3;
//
//Because when returned 1st data then stop eventhandler.
//GetResult.Completed -= new EventHandler(GetResult_Completed);
//
}
IsBusy = false;
}
請嘗試以下操作:
private int loadCounter;
private void LoadinDatagrid()
{
loadCounter = 3;
IsBusy = true;
GetResult = DomainContext.Current.Load(GetSomething1Query(), LoadCompleted);
GetResult = DomainContext.Current.Load(GetSomething2Query(), LoadCompleted);
GetResult = DomainContext.Current.Load(GetSomething3Query(), LoadCompleted);
}
private void LoadCompleted(LoadOperation result)
{
Interlocked.Decrement(loadCounter); // Thread save decrementing
if(loadCounter == 0) // All queries have been loaded
{
IsBusy = false;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.