在 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在第一个方法完成之前执行,所以我得到了空引用错误。如何确保在服务调用完成后执行第二种方法?我希望我把我的问题说清楚了。

在 WCF 方法之后执行方法

沿着这些思路应该可以工作:

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 答案