1

WCF サービスを参照する Silverlight クラス ライブラリがあり、WCF サービスを呼び出す StoreNodes() というメソッドがあります。このような:

public void StoreNodes()
{    
    DataServiceClient client = new DataServiceClient();
    client.GetNodesForCoreCompleted += client_GetNodesForCoreCompleted;
    client.GetNodesForCoreAsync();
}

そして、次のように BuildAll() と呼ばれる別のメソッド:

public void BuildAll()
{
    StoreNodes();
    Method2();
}

私の問題は、method2() が WCF サービスではなく、StoreNodes と Method2 の両方に共通の変数がいくつかあることです。これらの変数は StoreNodes で値を取得し、2 番目のメソッドはそれらに対して何らかの操作を行います。とにかく、問題は methode2 が実行されることです。最初のメソッドが終了する前に、null 参照エラーが発生しました。サービスの呼び出しが終了した後に 2 番目のメソッドが実行されるようにするにはどうすればよいですか?? 私の質問が明確になったことを願っています。

4

2 に答える 2

2

これらの線に沿った何かが機能するはずです:

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();
}
于 2012-04-25T20:16:51.040 に答える
1

この問題を解決するには、2 つの方法があります。

まず、非同期メソッド チェーンのタイプを設定できます。各メソッドが完了すると、次のメソッドが呼び出されます。

StoreNodes();
|
V
 client_GetNodesForCoreCompleted
  |->Method2();

そして、あなたはこれを続けることができます...

   |
   V
   client_Method2Completed
    |->Method3();
    ....

Method2もう 1 つの方法は、適切な変数が設定されるまで待機する何らかの種類の待機を内部に配置することです。ただし、これは Silverlight の一般的なプログラミング パラダイムに反するため、現実的にはお​​勧めしません。リソースを待っている間は、UI がロックされます。IF、これはあなたが望むものです、そしてここに値を待つ方法についてのSOの答えがあります

于 2012-04-25T20:13:14.623 に答える