应用程序上的 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和验证开始之间添加轻微的延迟。
怎么样:
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
。请查看帖子以获取更多详细信息。
试试这些,然后带着新的、更有趣的问题返回。