如何在C#中创建可重新触发的延迟?

刘易斯

我所拥有的是用户名的字符串属性,该字符串属性通过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#中执行此操作吗?谢谢!

gra

这是开始对每种类型进行延迟检查的代码,但是只有最后一次调用才实际检查用户名:

private int _checkUsernameCalls = 0;
public string Username
{
    get => _username;
    set
    {
        SetProperty(ref _username, value);
        _checkUsernameCalls++;
        Task.Delay(TimeSpan.FromSeconds(1)).ContinueWith(t => CheckUsernameExists());
    }
}

void CheckUsernameExists()
{
    if (--_checkUsernameCalls > 0)
    {
        return;
    }
    // actual checks...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#中为命令创建延迟?

来自分类Dev

如何在 C# 中创建可重用的属性

来自分类Dev

如何在C#中延迟执行

来自分类Dev

如何在c#中延迟某些东西

来自分类Dev

如何在 C# 中实现列表的延迟改组?

来自分类Dev

如何在Windows Phone 7的C#中延迟方法?

来自分类Javascript

如何在QML中创建延迟功能?

来自分类Python

如何在RabbitMQ中创建延迟队列?

来自分类Java

如何在Swing中创建延迟

来自分类Dev

如何在Swift中创建延迟?

来自分类Dev

如何在C#中创建对象

来自分类Dev

如何在C#中创建HashMap

来自分类Dev

如何在c#中创建属性

来自分类Dev

如何在并行C#中触发任务列表

来自分类Dev

新手如何在C#中引发/触发事件

来自分类Dev

如何在PhantomJS中滚动以触发延迟加载?

来自分类Dev

如何在 c# 数据工厂中创建一个长时间延迟运行的一次性管道

来自分类Dev

如何在C#中的函数中动态创建列表

来自分类Dev

如何在C#中的UI线程上延迟运行代码?

来自分类Dev

如何在C#中延迟任务中部分代码的执行

来自分类Dev

在淡入这些灯光之前,如何在Unity C#中添加两秒钟的延迟?

来自分类Dev

如何在 c# .NET core 3.1 中延迟某个任务

来自分类Dev

如何在Firebase中更改值并重新触发eventListener?

来自分类Dev

如何在ReactJS中触发模型更改的重新渲染?

来自分类Dev

如何在Angular 7中创建延迟加载Treeview

来自分类Javascript

如何在阻塞的nodejs中创建睡眠/延迟?

来自分类Dev

如何在 Azure Stream Analytics 中创建延迟滑动窗口

来自分类Dev

如何在分形绘制递归函数中创建延迟

来自分类Dev

如何在C#中创建3维词典

Related 相关文章

热门标签

归档