在MVVM silverlight中调用异步方法

时间:2011-06-12 06:59:01

标签: silverlight mvvm

面对Silverlight中的一些问题调用方法。 这是场景: -

我的服务代理包含在WCF服务中调用方法的方法。我打电话的方式是:

   public void GetMethod(EventHandler<GetMethodCompletedEventArgs> callback)
    {
        _Proxy.GetMethodCompleted += callback;
        _Proxy.GetMethodAsync();
    }

我在View模型中调用此方法,就像这样

private void SomeMethod()
{
ServiceAgent.GetMethod(inputVariable, new EventHandler<GetMethodCompletedEventArgs>(OnGetMethod_Completed));
}

void OnGetMethod_Completed(GetMethodCompletedEventArgs e)
{
int result = e.Result;
}

我已将视图模型中的方法附加到UI中的按钮。

现在问题是,如果我第一次按下按钮一切正常,如果我按两次OnGetMethod_Completed()执行2次点击一次按钮(即第二次按钮点击),当我第三次按它它被执行3次等等...... 我真的不明白为什么会这样,如果有人那么请帮助我。

提前致谢

2 个答案:

答案 0 :(得分:3)

您需要从OnGetMethod_Completed

上的已完成事件中取消注册
void OnGetMethod_Completed(GetMethodCompletedEventArgs e)
{
  int result = e.Result;
  _Proxy.GetMethodCompleted  -= OnGetMethod_Completed
 }

答案 1 :(得分:0)

对于异步调用,您需要在发生之前避免后续调用,而不是在可能冗长的进程结束时。否则你仍然可以很愉快地触发多个事件。虽然除了第一个之外的所有结果都将被忽略,但您仍然会向服务器发送数据(最好避免)。

您实际上只想在处理过程中禁用按钮或其他GUI元素。这是使用BusyIndi​​cator的理想场所,但只需将按钮的启用状态绑定到处理状态就足够了。