Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用代码停止方法的执行_C#_Asp.net Mvc - Fatal编程技术网

C# 如何使用代码停止方法的执行

C# 如何使用代码停止方法的执行,c#,asp.net-mvc,C#,Asp.net Mvc,我的控制器中有一个方法,我用ajax调用它。 可以经常调用该方法(取决于用户键入的速度)。 用户输入字母、单词。我希望在用户停止键入时调用该方法 方法的参数是用户编写的文本 在我看来,这个方法在很短的时间内被调用了很多次 是否有一种方法可以始终(在每个字母之后)调用该方法,但如果立即调用该方法,则该方法会立即停止执行 示例:用户将缓慢写入10个字母-该方法将被调用10次。 示例:用户将快速写入10个字母-该方法将在第10次调用,或者该方法将被调用10次,但将停止执行前9次,只完成第10次执行假设

我的控制器中有一个方法,我用ajax调用它。 可以经常调用该方法(取决于用户键入的速度)。 用户输入字母、单词。我希望在用户停止键入时调用该方法

方法的参数是用户编写的文本

在我看来,这个方法在很短的时间内被调用了很多次

是否有一种方法可以始终(在每个字母之后)调用该方法,但如果立即调用该方法,则该方法会立即停止执行

示例:用户将缓慢写入10个字母-该方法将被调用10次。
示例:用户将快速写入10个字母-该方法将在第10次调用,或者该方法将被调用10次,但将停止执行前9次,只完成第10次执行

假设您使用AJAX调用它,那么我认为您最好将逻辑放在客户端。考虑使用一些只在打字暂停后张贴Ajax调用的东西。

可以通过缓冲结果并将它们传递到该方法来实现这一点。基本上,通过将此方法包装在聚合器方法中,可以防止此方法一直触发

//... Class Impl

private string keys = String.Empty;
private readonly TimeSpan bufferDelay = new TimeSpan(100000);
private DateTime lastKeyPress = DateTime.UtcNow;

private void DoSomething(string text)
{
//do something to process text.
    keys = String.Empty;

}


public void DoSomethingBuffer(string text)
{
    keys =+ text;
    var now = DateTime.UtcNow;
    if((now-lastKeyPress) > bufferDelay)
{
    DoSomething(keys);
}
    lastKeyPress = now;

}
//... More Class Impl

您需要使用聚合时间窗口来找到一些感觉自然的东西,但它应该相对简单。您将调用DoSOmethingBuffer,而不是直接调用DoSomethign。

您可以使用javascript计时器来实现这一点。下面是一个示例,在用户上次按键半秒后触发任何逻辑。 如果用户继续键入,则计时器将不断被取消:

$(function() {
    var timer;
    $(".typeAhead").keypress(function() {
        if (timer != null)
            clearTimeout(timer);
        timer = setTimeout(function() {
            // do ajax call
        }, 500);
    });
});

此代码段使用jquery,但您可以不使用它。只需使用
getElementById()
而不是选择器。

是否使用jQuery进行ajax调用?是否手动实现“自动完成”?即使您没有实现自动完成,您也可以检查该自动完成是否实现了
不执行任何操作,直到用户暂停键入您可以学习的行为。