【发布时间】:2016-10-31 08:26:46
【问题描述】:
我需要实现以下内容:我有一个用户输入电子邮件的页面。每次文本更改时,我都必须检查用户是否存在于数据库中,并根据该信息将按钮的文本设置为“注册”或“登录”。问题是,这个 DB 请求可能需要几秒钟(原因无关紧要)并且 API 是异步的,所以事件处理程序将用async 装饰,并且由于邮件条目可能会多次更改,所以这个处理程序将是在任何一个结束之前调用了几次。因此,我将有并发的 API 请求,然后可能会同时尝试更改按钮文本,这可能不会很好地结束。我想到了这样的事情:
private async void OnTextChanged(object sender, TextChangedEventArgs e)
{
mailEntry.TextChanged -= OnTextChanged;
...
submitButton.Text = (await api.AccountExistAsync(mailEntry.Text)).IsRegistered
? "Sign in"
: "Sign up";
...
mailEntry.TextChanged += OnTextChanged;
}
但是这种设计的一个问题是,比如说,在-= OnTextChanged 和+= OnTextChanged 之间输入了一个有效的电子邮件,在这种情况下它永远不会被检查。
我的问题是,实现我想要实现的目标的正确方法是什么?提前致谢。
【问题讨论】:
-
您想阻止用户在您验证时编辑文本吗?或者您想在发出新请求时取消当前请求?
-
我确定我不想阻止用户输入文本,用户不应该关心请求。
-
我很确定有更好的方法来做这个验证检查。并且更改文本应该无关紧要..您能否展示您当前如何检查 isValid User 例如..您应该在提交时检查此类内容..
-
@MethodMan 查看编辑
-
你喜欢什么样的行为?旧请求被取消且不更新 UI,只有最新请求才能更新 UI?
标签: c# .net xamarin xamarin.forms mobile-development