簡體   English   中英

Silverlight 4 + RIA服務負載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM