【发布时间】:2019-08-26 18:45:03
【问题描述】:
我拥有的是用户名的字符串属性,通过 MVVM 连接到文本条目,无论何时设置,我都会调用一个方法来检查服务器以查看用户名是否可用。现在我不希望每次键入一个键时都调用它,而是让它检测用户何时停止键入。
目前这是我的代码...
private string _username;
public string Username
{
get => _username;
set
{
SetProperty(ref _username, value);
Task.Run(async () => await CheckUsernameExists(1000));
}
}
然后是 CheckUsernameExists() 方法...
/// <summary>
/// Checks if the username already exists
/// </summary>
/// <returns></returns>
public async Task CheckUsernameExists(int timeoutInMilliseconds)
{
await Task.Delay(timeoutInMilliseconds);
try
{...
但是这不会重新触发它,它只是将调用延迟 1 秒。
我从虚幻引擎 4 中得到了可重新触发延迟的想法 https://docs.unrealengine.com/en-US/BlueprintAPI/Utilities/FlowControl/RetriggerableDelay/index.html
UE4 的情况是,该函数被调用一次。然后它在可重新触发的延迟上启动计时器。如果在该计时器运行时再次调用该函数,它将重新启动计时器。然后,只有当它完成时,它才会调用它之后的代码。
有谁知道如何在 C# 中做到这一点?谢谢!
【问题讨论】:
-
这是在 WPF 中吗?如果有,是什么版本?
标签: c# asynchronous task delay