0

わかりました...次の質問です。私は Silverlight 5 C#2012 を使用していますが、少し助けが必要なところまで来ました。ドメイン モデルを使用してメソッドを呼び出して情報を返していますが、同じボタンを複数回押すと、メソッド呼び出しが段階的に行われることがわかりました。最初のクリックで 1 回の呼び出し、2 回目のクリックで 2 回の呼び出し、3 回目のクリックで 3 回の呼び出しなど。

以下の簡単なコードを確認してください。なぜこれが起こっているのかについて洞察を提供していただければ幸いです。

サービス層:

インターフェース:

[OperationContract]
string GetEnteredString(string strText);

クラス:

public string GetEnteredString(string strText)
{
    return "You entered: " + strText;
}

Silverlight アプリケーションでは:

private void btnGetText_Click(object sender, RoutedEventArgs e)
{
    service.GetEnteredStringCompleted += new EventHandler<CARE_WCF.GetEnteredStringCompletedEventArgs>(service_GetEnteredStringCompleted);
    service.GetEnteredStringAsync(txtTester.Text);
}

private void service_GetEnteredStringCompleted(object sender, CARE_WCF.GetEnteredStringCompletedEventArgs e)
{
    MessageBox.Show(e.Result.ToString());       
}

これは一見非常に簡単に見えますが、GetEnteredString メソッドの呼び出しは、それ自体の上にスタックし続けます。Click イベントの += が原因だと思いますが、間違っている可能性があります。

洞察を事前にありがとうございます!ほんとうにありがとう。エリック

4

1 に答える 1

0

次のような Completed 関数でイベントの登録を解除する必要があります。

service.GetEnteredStringCompleted -= service_GetEnteredStringCompleted;
于 2013-03-29T15:47:43.113 に答える