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