C#申请延期
我目前正在开发一个应用程序,我想实现一个时间延迟。我不想使用System.Threading.Thread.Sleep(x);当我读到这篇文章时,线程暂停(UI冻结) 我目前编写的代码是:C#申请延期,c#,timer,delay,C#,Timer,Delay,我目前正在开发一个应用程序,我想实现一个时间延迟。我不想使用System.Threading.Thread.Sleep(x);当我读到这篇文章时,线程暂停(UI冻结) 我目前编写的代码是: public void atimerdelay() { lblStat.Text = "In the timer"; System.Timers.Timer timedelay; timedelay = new System.Timers.Timer(5000); timede
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秒。我已经读过了,但是我不明白为什么上面的代码不起作用
其他信息-(为哈姆雷特·哈科比扬添加)
该应用程序是“卡片检查”应用程序(大学项目-未使用或存储任何真实信息)。一旦用户填写了所有相关信息并单击“检查”,将调用验证方法列表。在所有这些被称为ping之前,将执行ping以确保计算机上存在实时internet连接。我想在ping和开始验证之间增加一点延迟 我永远不会忘记。它适用于Windows窗体应用程序,并且比创建计时器
要轻得多。如何:
await Task.Delay(5000)
??它不会阻塞UI线程,看起来很不错 您可以使用
System.Timers.Timer
在时间间隔过后触发事件。它们对于简单地延迟执行是没有用的
如果您添加了:timedelay.appeased+=delayedFunction
到您的代码中,则delayedFunction
将在5秒后被调用
用户填写完所有相关信息后,单击“检查”列表
一系列的验证方法被调用。在这些被称为
执行ping以确保网络上有实时互联网连接
电脑。我想在ping和
开始验证
这是一个很好的实践,所有长时间的游戏任务都在单独的线程中完成。如果您有.NET4.0+
,您可以使用任务
()。如果您的任务与UI
交互,您可以在没有TPL
可用时使用
关于Ping
的详细信息您可以使用Ping.SendAsync
。有关更多详细信息,请查看
尝试这些,然后返回新的、更有趣的问题。在搜索延迟函数(不使用睡眠)后,我发现了这个问题
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;
}
经过
.NET4.0
测试,它工作正常。也许这对其他人有用。看起来很棒。它在幕后做什么?wait键是由.NETFramework4.5引入的。看一看,您应该知道什么是async\await,以及它们是如何工作的,以理解此语句,请参见此处:如果您确实需要在UI线程中等待,则没有什么可以帮助您。“你还是僵住了。如果你能解释一下你的真实情况,我想还有另一种方法来解决你的问题。”哈姆雷特·哈科比扬补充了一些关于什么是应用程序以及我希望它工作的信息。不是我见过的最优雅的编码,但很高兴知道我有东西,干杯