私はWCFサービスの初心者です.WCFサービスを非同期に呼び出すときに、LabelコントロールのようなWPF UI要素を更新する方法があるかどうかを判断しようとしています。ここでDispatcherでUIエレメントを更新するより良い方法はありますか?
は、コードの一部です:あなたが見ることができるように
private void button1_Click(object sender, RoutedEventArgs e)
{
int result;
CalculatorServiceClient proxy = new CalculatorServiceClient();
AsyncCallback addOperation = (async_result) =>
{
result = proxy.EndAdd(async_result);
Dispatcher.Invoke(DispatcherPriority.Normal,
new Action(
delegate()
{
label1.Content = result.ToString();
}
)
);
proxy.Close();
};
proxy.BeginAdd(Convert.ToInt32(txtNumber1.Text), Convert.ToInt32(txtNumber2.Text), addOperation, null);
}
、私はAsyncCallbackによって得られた非同期結果、とlabel1.Contentを更新しています。
私の質問は、この非同期コールバック操作内のUIコントロールをリフレッシュするためのより良い、またはより正しい方法がありますか?
ありがとうございます!
実際には、WCFは私がどこで 'using'ブロックを実装すべきか知っている1つのケースです。 http://weblogs.asp.net/jezell/archive/2008/07/02/indisposable-wcf-gotcha-1.aspxの「Indisposable:WCF Gotcha#1 - Jesse Ezell Blog」を参照してください。 –
うわー、でも分かりますか? Closeメソッドをまったく使用しないでくださいが、Abort()メソッドを使用するべきですか?これは実際には特定の問題を使用するのではなく、マイクロソフトによるより奇妙な実装です。 – Zyphrax
いいえ、閉じるはOKです。問題は次のとおりです。「使用」で例外1がスローされました。 Disposeが呼び出されます。コールを「閉じる」;クローズスロー例外2.例外1が失われました。私が投稿したブログのパターンが動作します。そして、はい、それはマイクロソフトの悪いデザインです。彼らは1つを逃した。私はDon Boxの見積もりを見つけました。このシナリオで呼び出されたときにクローズがスローされても問題ないかどうか尋ねられました。彼はすでに例外を処理していたのでOKでした。彼は_different_例外を処理していたことを忘れていました。 –