C# 在WCF方法之后执行方法
我有一个引用WCF服务的Silverlight类库, 我有一个名为StoreNodes()的方法,它调用WCF服务。 像这样:C# 在WCF方法之后执行方法,c#,wcf,silverlight-4.0,C#,Wcf,Silverlight 4.0,我有一个引用WCF服务的Silverlight类库, 我有一个名为StoreNodes()的方法,它调用WCF服务。 像这样: public void StoreNodes() { DataServiceClient client = new DataServiceClient(); client.GetNodesForCoreCompleted += client_GetNodesForCoreCompleted; client.GetNodesForCoreA
public void StoreNodes()
{
DataServiceClient client = new DataServiceClient();
client.GetNodesForCoreCompleted += client_GetNodesForCoreCompleted;
client.GetNodesForCoreAsync();
}
还有另一个名为BuildAll()的方法,如下所示:
public void BuildAll()
{
StoreNodes();
Method2();
}
我的问题是method2()不是WCF服务,StoreNodes和method2都有一些共同的变量,这些变量在StoreNodes中获取它们的值,第二个方法对它们执行一些操作,无论如何,问题是method2是在第一个方法完成之前执行的,所以我得到了null引用错误。如何确保在服务调用完成后执行第二个方法??
我希望我把问题说清楚。有两种方法可以解决这个问题 首先,您可以设置一种类型的异步方法链接。每个方法完成后,将调用下一个方法:
StoreNodes();
|
V
client_GetNodesForCoreCompleted
|->Method2();
你可以继续这个
|
V
client_Method2Completed
|->Method3();
....
另一种方法是,您可以在
Method2
中放置某种等待,直到设置了适当的变量。然而,这与Silverlight的一般编程范式背道而驰,因此我不会现实地建议它。它会在您等待资源时锁定您的UI。如果,这是您想要的,那么沿着这些思路应该可以做到:
public void BuildAll()
{
StoreNodes(() => { Method2(); });
}
public void StoreNodes(Action getNodesCompleteAction)
{
DataServiceClient client = new DataServiceClient();
client.GetNodesForCoreCompleted += (sender, e) => {
// your handler code
// call Method2() Action wrapper
getNodesCompleteAction();
}
client.GetNodesForCoreAsync();
}
是什么阻止你在client_GetNodesforCore Completed中调用Method2?@villecoder,你应该将你的评论作为答案发布:)@villecoder:我考虑过,但这不是重点,谢谢你的时间:)@AboKevo我不确定你在问什么。您试图在WCF方法完成后调用Method2,对吗?为什么不调用指定在WCF调用完成后执行的方法?@villecoder:我知道你完全正确,而且你的方法100%有效,但出于某种原因,我不想这样做,如果没有其他方法有效,我会按照你说的做,并更改类库的设计:DThanks谢谢你的回答,我会尝试一下。