1

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

echo Hello
ping localhost -n 10 > nul
echo World
pause > nul

那么我可以在 C# 中执行此操作,它是否可以与 Winforms 或仅控制台一起使用,因为我需要它用于 Winforms... [编辑] 我只需要一个方法来暂停,但应用程序的其余部分仍然继续。例如,如果我有一个按钮,单击,然后 5 秒后继续调用的其余方法。但与此同时,还能按其他按钮吗?

4

2 回答 2

1

开始调用?

new Action(() => {
    Console.WriteLine("Waiting...");
    Thread.Sleep(10000);
    Console.WriteLine("Over");
}).BeginInvoke(null, null);
于 2012-04-21T02:28:32.740 回答
1

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

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

// 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
}
于 2012-04-21T01:54:48.453 回答