c# - 如何在不使用 Thread.Sleep() 的情况下暂停执行
问题描述
我有几行代码,例如:
MessageBox.Show("1");
Sleep(1000);
MessageBox.Show("2");
Sleep(1000);
MessageBox.Show("3");
我想暂停 1 秒,然后继续下一个代码行而不使用Thread.Sleep
; 因为它冻结了整个表单并终止了应该在睡眠代码之前执行的代码行。我不为此使用消息框,我仅用于一个示例,我知道它可以与那些一起使用。
对于我最初使用的线路,它不起作用。在继续运行代码之前是否有其他选择可以等待 1 秒?谢谢。
解决方案
是的,使您的方法异步并使用 await Task.Delay(1000)
public async Task MyAsyncMethod()
{
//Action 1
await Task.Delay(1000);
//Action 2
await Task.Delay(1000);
//Action 3
await Task.Delay(1000);
}
编辑:
如果使用 Winforms,则此异步模式必须转到层次结构中的最高方法。因此,假设您确实有一个要在其中调用此方法的按钮单击事件。然后你必须使点击方法异步!
private async void button2_Click(object sender, EventArgs e)
{
Console.WriteLine("STUFF Before");
await MyAsyncMethod();
Console.WriteLine("STUFF @ the END");
}
public async Task MyAsyncMethod()
{
//Action 1
Console.WriteLine("Action 1 ");
await Task.Delay(1000);
//Action 2
Console.WriteLine("Action 2 ");
await Task.Delay(1000);
//Action 3
Console.WriteLine("Action 3 ");
await Task.Delay(1000);
}
要实现这一点,您需要声明MyAsyncMethod
as的返回类型Task
:
public async Task MyAsyncMethod()
^
!
推荐阅读
- sap-cloud-sdk - Cloud SDK 版本从 3.36.0 升级到 3.42.0 失败
- javascript - 聊天 url 与 websocket 的集成在 Angular 应用程序中无法按顺序工作
- javascript - 如何根据屏幕宽度显示模态?
- go - 如何在 Go 中将具有零值的 []byte 转换为字符串?
- ruby-on-rails - rack_reverse_proxy、Wordpress 和 Polylang 的错误翻译
- postgresql - 恐慌:无法在 postgres 13.2 上找到有效的检查点记录
- memory-leaks - 如何处理 Angular 10 中的 js 内存堆问题
- visual-studio-2019 - VS2019 不同语言的目录上下文菜单
- python - 用于谣言检测的 BERT 模型
- c# - .net core 3.1 - 读取操作失败,见内部异常。System.Net.Http.WinHttpException (0x80004004): Operation aborted;