首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >银光4异步等怎么了?

银光4异步等怎么了?
EN

Stack Overflow用户
提问于 2011-08-28 22:45:55
回答 1查看 1.4K关注 0票数 1

我有个问题:

代码语言:javascript
复制
//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);
    }

每当我打电话的时候

代码语言:javascript
复制
QuestVM.getExamsMasterbyExamID(eUtility.ConvertInt32(this.txtID.Text), ref entryE_QuestMaster);

它运行以下代码

代码语言:javascript
复制
 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);

        }

我的问题是,我想等到我的e.result回到iCollectionDataResult

目前,在调用此服务之后,系统将继续执行下一行代码,该代码位于foreach循环中。在这个阶段,我的entryE_QuestMaster没有任何记录,我只是想等到我的结果返回之前循环继续。

回答后ChrisF

chrisf说的不会对我有用,但是我想做我的MVVM类中的每一件事,而不是在表单级别上,在这里,我的代码发生了变化,我仍然需要你们的帮助,我需要做一些专业的代码,而不是仅仅编写大量的代码。

我在MVVM类中添加了这两行

代码语言:javascript
复制
        public delegate void ShowQuestionTreeView(ObservableCollection<sp_GetQuestMasterbyExamID_Result> iResultQuestMaster);
    public event ShowQuestionTreeView ShowQuestionforTreeview;

在方法上,我添加了以下内容

代码语言:javascript
复制
  /// <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);
    }

在客户端,我做了这个

代码语言:javascript
复制
            //Generate Treeview for question
        QuestVM.ShowQuestionforTreeview += new eQuestCreateVM.ShowQuestionTreeView(QuestVM_ShowQuestionforTreeview);

方法:

代码语言:javascript
复制
  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);              
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2011-08-28 22:53:59

您需要移动此代码:

代码语言:javascript
复制
       client.getExamsMasterCompleted+=(s,e)=>
            {
                iCollectionDataResult = e.Result;
            };

在你打给getExamsMasterbyExamID的电话之外。这也意味着移动您声明和初始化eLearningDataServicesClient的位置。

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

您需要按照以下思路组织代码:

代码语言:javascript
复制
eLearningDataServiceClient client = new eLearningDataServiceClient();
client.getExamsMasterCompleted += (s,e) =>
{
    //Loop to show questions
}

client.getExamsMasterAsync(ID);

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7224484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档