Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Silverlight 4异步等待如何?_Silverlight_Asynchronous - Fatal编程技术网

Silverlight 4异步等待如何?

Silverlight 4异步等待如何?,silverlight,asynchronous,Silverlight,Asynchronous,我有一个问题: //Get All master record entryE_QuestMaster = new ObservableCollection<E_QuestMaster>(); //Here I am calling my web service to get data QuestVM.getExamsMasterbyExamID(eUtility.ConvertInt32(this.txtID.Text), ref entryE_QuestMaster);

我有一个问题:

//Get All master record
entryE_QuestMaster = new ObservableCollection<E_QuestMaster>();

 //Here I am calling my web service to get data
 QuestVM.getExamsMasterbyExamID(eUtility.ConvertInt32(this.txtID.Text), ref entryE_QuestMaster);

 //Loop to show questions
 int iNumber=1;
 foreach (var oIn in entryE_QuestMaster)
   {
      Node subNode = new Node();
      subNode.Content = oIn.e_Question;
      subNode.Name = "Quest_" + iNumber.ToString().Trim();
      subNode.Tag = oIn.e_QID.ToString();
      subNode.Icon = "/Images/Number/" + iNumber.ToString().Trim() + ".gif";
      iNumber++;
      this.tvMainNode.Nodes.Add(subNode);
    }
它运行以下代码

 public void getExamsMasterbyExamID(int ID, ref ObservableCollection<E_QuestMaster> iCollectionData)
        {
            ObservableCollection<E_QuestMaster> iCollectionDataResult = iCollectionData;
            eLearningDataServiceClient client = new eLearningDataServiceClient();
            isSync = true;
            client.getExamsMasterCompleted+=(s,e)=>
                {
                    iCollectionDataResult = e.Result;
                };
            client.getExamsMasterAsync(ID);

        }
然后在方法中我添加了这个

  /// <summary>
    /// 
    /// </summary>
    /// <param name="ID"></param>
    public void getExamsMasterbyExamID(int ID, ref ObservableCollection<sp_GetQuestMasterbyExamID_Result> iCollectionData)
    {
        ObservableCollection<sp_GetQuestMasterbyExamID_Result> iCollectionDataResult = iCollectionData;
        eLearningDataServiceClient client = new eLearningDataServiceClient();
        client.getExamsMasterbyExamIDCompleted+= (s, e) =>
            {
                iCollectionDataResult = e.Result;
                **ShowQuestionforTreeview(iCollectionDataResult);**
            };
        client.getExamsMasterbyExamIDAsync(ID);
    }
方法:

  void QuestVM_ShowQuestionforTreeview(ObservableCollection<sp_GetQuestMasterbyExamID_Result> iResultQuestMaster)
    {
        //Loop to show questions
        int iNumber = 1;
        foreach (var oIn in iResultQuestMaster)
        {
            Node subNode = new Node();
            subNode.Content = oIn.e_Question;
            subNode.Name = "Quest_" + iNumber.ToString().Trim();
            subNode.Tag = oIn.e_QID.ToString();
            subNode.Icon = "/Images/Number/" + iNumber.ToString().Trim() + ".gif";
            subNode.Title = oIn.e_Question_Text;
            iNumber++;
            tvCreateQuestion.Nodes[0].Nodes.Add(subNode);              
        }
    }
void QuestVM\u show questionfortreeview(ObservableCollection DirectResultQuestMaster)
{
//循环显示问题
int iNumber=1;
foreach(iResultQuestMaster中的变量)
{
节点子节点=新节点();
subNode.Content=oIn.e_问题;
subNode.Name=“Quest_”+iNumber.ToString().Trim();
subNode.Tag=oIn.e_QID.ToString();
subNode.Icon=“/Images/Number/”+iNumber.ToString().Trim()+“.gif”;
subNode.Title=oIn.e_Question_Text;
iNumber++;
tvCreateQuestion.Nodes[0]。Nodes.Add(子节点);
}
}

您需要移动此代码:

       client.getExamsMasterCompleted+=(s,e)=>
            {
                iCollectionDataResult = e.Result;
            };
在调用
GetExamMasterByExamid
的外部。这还意味着将移动到您声明和初始化
eLearningDataServicesClient
的位置

此时设置代码的方式意味着您假设在方法返回时将设置
iCollectionDataResult
。然而,情况并非如此。该方法将在触发
GetExamMasterCompleted
事件之前返回

您需要按照以下方式组织代码:

eLearningDataServiceClient client = new eLearningDataServiceClient();
client.getExamsMasterCompleted += (s,e) =>
{
    //Loop to show questions
}

client.getExamsMasterAsync(ID);

或者将问题的显示绑定到ObservableCollection,以便在设置时自动更新UI。

您需要移动此代码:

       client.getExamsMasterCompleted+=(s,e)=>
            {
                iCollectionDataResult = e.Result;
            };
在调用
GetExamMasterByExamid
的外部。这还意味着将移动到您声明和初始化
eLearningDataServicesClient
的位置

此时设置代码的方式意味着您假设在方法返回时将设置
iCollectionDataResult
。然而,情况并非如此。该方法将在触发
GetExamMasterCompleted
事件之前返回

您需要按照以下方式组织代码:

eLearningDataServiceClient client = new eLearningDataServiceClient();
client.getExamsMasterCompleted += (s,e) =>
{
    //Loop to show questions
}

client.getExamsMasterAsync(ID);

或者将问题的显示绑定到ObservableCollection,这样当它被设置时,UI会自动更新。

嗨,克里斯芙:你能看到我所做的更改吗?@AQEEL:不要使用caps它的坏先例。我克里斯芙:你能看到我所做的更改吗?@AQEEL:不要使用caps它的坏先例
eLearningDataServiceClient client = new eLearningDataServiceClient();
client.getExamsMasterCompleted += (s,e) =>
{
    //Loop to show questions
}

client.getExamsMasterAsync(ID);