【问题标题】:How can I make the Program wait a Certain time?如何让程序等待一段时间?
【发布时间】:2022-07-23 10:35:31
【问题描述】:

所以我的确切问题是,我希望程序等待 3 秒,如果没有任何反应,id 应该执行我调用的任何方法。但是如果有人在这 3 秒内输入了一些东西,计时器应该会重新启动。

Threadsleep 不起作用,因为它会阻塞所有内容并且您无法提供任何输入。

例如,我有一个过滤功能,现在我不想在他输入一个字母后立即过滤,我等待 3 秒,如果没有任何反应,我开始过滤。我需要这个,这样我的程序就不会花费很长时间来过滤每个字母。

这是我当前来自 Filtermethod 的代码:

private void ContainsFilter(object sender, EventArgs e, TextBox textBox, DataGridView dataGridView, int columnIndex)
        {
            if (textBox.Text != "")
            {
                var value = "";
                var filterText = "";
                for (int i = 0; i < dataGridView.RowCount; i++)
                {
                    value = Convert.ToString(dataGridView.Rows[i].Cells[columnIndex].Value);
                    value = value.ToLower();
                    filterText = textBox.Text;
                    filterText = filterText.ToLower();
                    if (value.Contains(filterText) == false)
                    {
                        dataGridView.Rows[i].Visible = false;
                    }
                    else
                    {
                        dataGridView.Rows[i].Visible = true;
                    }
                }
                return;
            }
            for (int i = 0; i < dataGridView.RowCount; i++)
            {
                dataGridView.Rows[i].Visible = true;
            }
            return;
        }

【问题讨论】:

  • 这是控制台程序还是 GUI?如果是后者,Winforms 还是别的什么?另外,你能显示你当前的代码吗?
  • 你能添加一些相关的代码,比如你尝试过的东西
  • 我认为任务是最好的选择。 await Task.Delay 持续三秒钟,然后检查任务是否中止 - 如果没有,继续。每次输入时,您都会中止最近的任务并开始新的任务。

标签: c#


【解决方案1】:

System.Timers.Timer 非常简单。
我试着给你一个笼统的答案。

1- 启动计时器。

System.Timers.Timer timer = new System.Timers.Timer(3000);
timer.Elapsed += (sender, e) =>
{
    // Filter
};
timer.AutoReset = false; // To execute and filter once, not repeatedly every 3 seconds.

2- 启动计时器。

基本上当文本发生变化时。这样做:

timer.Stop();  // Stop the previous timer (in case it is not elapsed yet.)
timer.Start(); // and start it again. To run after 3 seconds.

3- 不要忘记处理计时器。

当你填满时,你就不再需要它了。程序停止,窗体关闭等。执行以下操作:

timer.Dispose();

【讨论】:

    【解决方案2】:

    您可以使用 C# 中的 Timer 类。 使用此类,您可以定义在经过一定时间后生成的事件。您也可以随时停止计时器。在您的情况下,当用户开始提供输入时。

    【讨论】:

      【解决方案3】:

      前段时间我也有同样的请求,我使用的方法是在用户输入至少三个字母时开始搜索

      【讨论】:

        猜你喜欢
        • 2020-07-16
        • 2019-01-15
        • 2010-11-22
        • 1970-01-01
        • 2018-03-20
        • 1970-01-01
        • 2021-05-08
        相关资源
        最近更新 更多