0

私は Silverlight と WCF の初心者です。Miguel A. Castro による非常に優れた記事「http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2」に出くわしました。この記事では、WCF を手動で追加する方法を教えています。

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

       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 メソッドを持つ最良の方法は? それは多くのリソースを消費しますか?

ありがとう、

4

1 に答える 1

0

機能する 1 つの方法: WCF サービス呼び出しの結果から全体を囲むUIElement構造を構築し、1 つの呼び出しを使用しDispatcher.BeginInvokeて、構造を に追加しspMain UIElementます。例えば:

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 );
}); 
于 2012-04-05T01:08:43.690 に答える