Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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#_Timer_Delay - Fatal编程技术网

C#申请延期

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

我目前正在开发一个应用程序,我想实现一个时间延迟。我不想使用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秒。我已经读过了,但是我不明白为什么上面的代码不起作用

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

该应用程序是“卡片检查”应用程序(大学项目-未使用或存储任何真实信息)。一旦用户填写了所有相关信息并单击“检查”,将调用验证方法列表。在所有这些被称为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线程中等待,则没有什么可以帮助您。“你还是僵住了。如果你能解释一下你的真实情况,我想还有另一种方法来解决你的问题。”哈姆雷特·哈科比扬补充了一些关于什么是应用程序以及我希望它工作的信息。不是我见过的最优雅的编码,但很高兴知道我有东西,干杯