应用程序上的 C# 时间延迟

本文关键字:时间延迟 程序上 应用程序 应用 | 更新日期: 2023-09-27 17:56:44

我目前正在开发一个应用程序,我想实现一个时间延迟。我不想使用 System.Threading.Thread.Sleep(x);当我读到这时,线程会停滞(UI 冻结)

我目前编写的代码是:

public void atimerdelay()
{
    lblStat.Text = "In the timer";
    System.Timers.Timer timedelay;
    timedelay = new System.Timers.Timer(5000);
    timedelay.Enabled = true;
    timedelay.Start();
}

我知道atimerdelay()确实被调用(使用lblStat),但没有5秒的延迟。我已经阅读了 http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx 但我无法弄清楚为什么上面的代码不起作用。

附加信息 -(为哈姆雷特·哈科比扬添加)

该应用程序是一个"卡检查器"应用程序(大学项目 - 不使用或存储真实信息)。一旦用户填写了所有相关的并单击"检查",就会调用验证方法列表。在调用其中任何一个之前,都会执行ping以确保计算机上有实时互联网连接。我想在ping和验证开始之间添加轻微的延迟。

应用程序上的 C# 时间延迟

怎么样:

await Task.Delay(5000)

?它不会阻塞 UI 线程,看起来不错!

我永远不会忘记这个精彩的片段。它适用于Windows表单应用程序,并且比创建Timer轻量级得多。

搜索延迟函数(不使用睡眠)后,我找到了这个

public static DateTime PauseForMilliSeconds(int MilliSecondsToPauseFor)
{
    System.DateTime ThisMoment = System.DateTime.Now;
    System.TimeSpan duration = new System.TimeSpan(0, 0, 0, 0, MilliSecondsToPauseFor);
    System.DateTime AfterWards = ThisMoment.Add(duration);
    while (AfterWards >= ThisMoment)
    {
        System.Windows.Forms.Application.DoEvents();
        ThisMoment = System.DateTime.Now;
    }
    return System.DateTime.Now;
}

它工作得很好,用.NET 4.0测试.也许这对其他人有用。

您可以使用System.Timers.Timer在时间间隔过后触发事件。它们对于简单地延迟执行没有用。

如果已将 timedelay.Elapsed += delayedFunction; 添加到代码中,则会在 5 秒后调用delayedFunction

用户填写所有相关内容后,单击"检查"列表 的验证方法被调用。在以下任何一项称为 执行 ping 以确保实时互联网连接在 计算机。我想在 ping 和 开始验证。

这是一种很好的做法,所有长时间运行的任务都在单独的线程中执行。如果您有.NET 4.0+可以使用Task(TPL)。如果您的任务与UI交互,则可以使用基于事件的异步模式(如果没有可用的TPL)。

具体关于您可以使用Ping Ping.SendAsync。请查看帖子以获取更多详细信息。

试试这些,然后带着新的、更有趣的问题返回。