2012-04-25 12 views
0

私はWCFサービスを参照するSilverlightクラスライブラリを持っています WCFサービスを呼び出すStoreNodes()というメソッドがあります。WCFメソッドの後にメソッドを実行

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

と、次のように)BUILDALL(と呼ばれる別の方法:このような

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

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

+3

client_GetNodesForCoreCompletedに方法2を呼び出してからあなたを停止していますか? – villecoder

+0

@villecoder、あなたは答えとしてあなたのコメントを投稿する必要があります:) –

+0

@villecoder:私はそれについて考えましたが、その点ではなく、あなたの時間のためにありがとう:) – AboKevo

答えて

0

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

まず、非同期メソッドチェーニングのタイプを設定できます。各メソッドが完了した後、それが次のいずれかを呼び出します。

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

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

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

他の方法は、あなたがMethod2その内部の待ち時間のいくつかの並べ替えを置くことができるということです適切な変数が設定されるまで待機します。しかし、これはSilverlightの一般的なプログラミングのパラダイムに反しているので、現実的には示唆しません。単純にリソースを待つ間はUIをロックします。 、これはあなたが望むものである場合には、これらの線に沿ってhere is a SO answer on how you could wait for the values

+0

あなたの答えをありがとう、私はそれを試してみます。 – AboKevo

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(); 
} 
+0

あなたの答えをありがとう、私はそれを試してみましょう。 – AboKevo

関連する問題