在 WCF 方法之后执行方法
本文关键字:方法 执行 之后 WCF | 更新日期: 2023-09-27 18:32:26
我有一个引用WCF服务的Silverlight类库,我有一个名为StoreNodes()的方法,用于调用WCF服务。喜欢这个:
public void StoreNodes()
{
DataServiceClient client = new DataServiceClient();
client.GetNodesForCoreCompleted += client_GetNodesForCoreCompleted;
client.GetNodesForCoreAsync();
}
还有另一个叫做 BuildAll() 的方法,如下所示:
public void BuildAll()
{
StoreNodes();
Method2();
}
我的问题是method2()不是WCF服务,并且StoreNodes和Method2都有一些共同的变量,这些变量在StoreNodes中获取它们的值,第二个方法对它们进行一些操作,无论如何,问题是methode2在第一个方法完成之前执行,所以我得到了空引用错误。如何确保在服务调用完成后执行第二种方法?我希望我把我的问题说清楚了。
沿着这些思路应该可以工作:
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();
}
有两种方法可以解决此问题。
首先,您可以设置一种异步方法链接。每个方法完成后,它将调用下一个方法:
StoreNodes();
|
V
client_GetNodesForCoreCompleted
|->Method2();
而且,您可以继续这样做...
|
V
client_Method2Completed
|->Method3();
....
另一种方法是,您可以在Method2
中放置某种等待,等待设置适当的变量。但是,这违背了 Silverlight 的一般编程范例,所以我不会现实地建议它。它会锁定您的 UI,而您只是等待资源。如果,这是您想要的,那么这里有一个关于如何等待值的 SO 答案