面对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次等等...... 我真的不明白为什么会这样,如果有人那么请帮助我。
提前致谢
答案 0 :(得分:3)
您需要从OnGetMethod_Completed
上的已完成事件中取消注册void OnGetMethod_Completed(GetMethodCompletedEventArgs e)
{
int result = e.Result;
_Proxy.GetMethodCompleted -= OnGetMethod_Completed
}
答案 1 :(得分:0)
对于异步调用,您需要在发生之前避免后续调用,而不是在可能冗长的进程结束时。否则你仍然可以很愉快地触发多个事件。虽然除了第一个之外的所有结果都将被忽略,但您仍然会向服务器发送数据(最好避免)。
您实际上只想在处理过程中禁用按钮或其他GUI元素。这是使用BusyIndicator的理想场所,但只需将按钮的启用状态绑定到处理状态就足够了。