2012-04-04 20 views
0

私はシルバーライトとWCFの始まりです。私は手動でWCFを追加することを教えるMiguel A. Castroの非常に良い記事 "http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2"に出くわしました。複数のDispatcher.BeginInvokeを作成しても構いませんか?

この例では、サービスによって返されたテキストをSilverlight UIのテキストブロックに書き込むためにDispatcher.BeginInvokeを使用しています。

 AsyncCallback asyncCallBack = delegate(IAsyncResult result) 
     { 
      List<Person> person = ((IPersonService_list)result.AsyncState).EndGetPersonData(result); 
      this.Dispatcher.BeginInvoke(delegate 
      { 
       spMain.Children.Add(new TextBlock 
       { 
        Text = person[0].FirstName + person[0].LastName + person[0].City + person[0].State 
       }); 

      }); 
     }; 

同じサービスを使用して複数のコントロールを設定する必要があります。私はBeginInvokeメソッド内で別の関数を呼び出すことはできないようです。複数のBeginInvokeメソッドを持つ最良の方法はありますか?それは多くのリソースを消費するのだろうか?

おかげで、うまくいく

答えて

0

一つの方法:Dispatcher.BeginInvokeに1つのコールを使用し、その後、WCFサービスの呼び出しの結果から、全体的に囲むUIElement構造を構築し、spMainUIElementに構造を追加します。例:

StackPanel sp = new StackPanel(); 
TextBlock tb1 = new TextBlock({ 
    Text=person[0].FirstName + person[0].LastName 
}); 
sp.Children.Add(tb1); 
TextBlock tb2 = new TextBlock({Text="AND SO ON Use this pattern to add UIElements to the stackpanel."}); 

sp.Children.add(tb2); 

//now - add the StackPanel which holds other UIElements to spMain. 

this.Dispatcher.BeginInvoke(delegate(){ 
    spMain.Children.Add(sp); 
}); 
+0

ありがとう、それは素晴らしい提案です! – user1298608

関連する問題