Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight 4&x2B;RIA服务负载_C#_Wcf_Silverlight_Silverlight 4.0_Ria - Fatal编程技术网

C# Silverlight 4&x2B;RIA服务负载

C# Silverlight 4&x2B;RIA服务负载,c#,wcf,silverlight,silverlight-4.0,ria,C#,Wcf,Silverlight,Silverlight 4.0,Ria,使用相同的加载操作加载多个实体,然后将其异步绑定到单个事件处理程序,这是一种可接受的做法吗?我这样做是因为我使用了一个忙指示器,我们不知道哪个实体返回得更快 或者我应该将加载分离为多个加载操作/EventHandler对吗 LoadOperation GetResult; private void LoadinDatagrid() { IsBusy = true; GetResult = DomainContext.Current.Lo

使用相同的加载操作加载多个实体,然后将其异步绑定到单个事件处理程序,这是一种可接受的做法吗?我这样做是因为我使用了一个忙指示器,我们不知道哪个实体返回得更快

或者我应该将加载分离为多个加载操作/EventHandler对吗

  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;     
    }

加载操作获取结果

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;
    }
}