C# 如何延迟类似“的代码”;ping localhost…“;C中除外#

C# 如何延迟类似“的代码”;ping localhost…“;C中除外#,c#,winforms,delay,shortcut,timing,C#,Winforms,Delay,Shortcut,Timing,是否可以在C#中运行一些代码,等待几秒钟,然后继续?我知道你可以用定时器,但有没有更简单、更快的方法?与批量一样,您可以执行以下操作: echo Hello ping localhost -n 10 > nul echo World pause > nul 那么我可以在C#中实现这一点吗?它是与Winforms一起工作还是只与Console一起工作,因为我需要它用于Winforms。。。 [编辑]我只需要一个暂停方法,但应用程序的其余部分仍在继续。例如,如果我有一个按钮,单击,5秒

是否可以在C#中运行一些代码,等待几秒钟,然后继续?我知道你可以用定时器,但有没有更简单、更快的方法?与批量一样,您可以执行以下操作:

echo Hello
ping localhost -n 10 > nul
echo World
pause > nul
那么我可以在C#中实现这一点吗?它是与Winforms一起工作还是只与Console一起工作,因为我需要它用于Winforms。。。 [编辑]我只需要一个暂停方法,但应用程序的其余部分仍在继续。例如,如果我有一个按钮,单击,5秒钟后继续调用该方法的其余部分。但与此同时,您还可以按其他按钮吗?

是-您可以通过所需的毫秒数呼叫。正在运行的代码将暂停,等待经过的毫秒数,然后继续执行。这种技术是通用的——它可以在winforms或控制台应用程序中工作

在winforms中,您不应该从UI线程调用
Thread.Sleep
。相反,您应该将您的方法一分为二—在延迟之前和延迟之后,生成一个带有
睡眠
的线程,并通过
调用
调用代码的第二部分

// This is your old method
void OnClick(object sender, EventArgs e) {
    // ... before the delay
    Thread.Sleep(1000);
    // After the delay
}

// This is your new method
void OnClick(object sender, EventArgs e) {
    // ... before the delay
    new Thread(() => {Thread.Sleep(1000); Invoke(Continuation); }).Start();
}

void Continuation() {
    // After the delay
}
开始醒来

new Action(() => {
    Console.WriteLine("Waiting...");
    Thread.Sleep(10000);
    Console.WriteLine("Over");
}).BeginInvoke(null, null);

有没有更好的方法,可以冻结整个应用程序。我只需要延迟一个功能,比如当有人点击一个按钮时,等待5秒钟,然后继续该方法的其余部分,但他们仍然可以按下其他按钮和东西?@leaf68在UI线程上执行延迟会冻结应用程序。您应该生成一个线程,并通过
Invoke
调用延续。以程序为例,了解如何从后台线程到UI线程进行通信。它是有效的,但我希望避免拆分我的方法,这就是为什么我不想同时使用计时器的原因。您可以使用Continuation作为匿名方法(甚至是lambda),而且它作为一个似乎一次单击的方法可能会更好。然而,从定义上讲,将其放在一个实际的单一方法上是不可能的。