📅  最后修改于: 2023-12-03 14:51:23.394000             🧑  作者: Mango
在 C# 中,等待几秒钟并不是一个难题,但同时不阻塞 UI 界面的执行,就需要使用异步编程。
使用异步编程模型的方式是,我们可以在 UI 线程中使用 async
和 await
关键字来等待某个异步操作的完成。
例如,我们可以使用 Task.Delay()
方法来等待几秒钟,代码如下:
private async void WaitSecondsAsync()
{
// 暂停执行 5 秒钟
await Task.Delay(5000);
MessageBox.Show("等待完成!");
}
上述代码中,WaitSecondsAsync()
方法是异步的,执行到 await Task.Delay(5000)
时,会暂停当前方法的执行,等待 5 秒钟后再继续执行。
除此之外,我们还可以使用 Task.Run()
方法来将耗时的操作移到另外一个线程中执行,以避免阻塞 UI 线程。
例如,我们可以编写如下的代码:
private async void WaitSecondsAsync()
{
await Task.Run(() =>
{
// 模拟执行一个耗时的操作
Thread.Sleep(5000);
});
MessageBox.Show("等待完成!");
}
上述代码中,我们使用 Task.Run()
方法将 Thread.Sleep(5000)
移到了另外一个线程中执行,这样就避免了阻塞 UI 线程的情况。
除了 async/await
和 Task.Run()
,我们还可以使用异步委托来执行耗时的操作。
例如,我们可以定义一个异步委托:
public delegate Task MyAsyncDelegate();
然后,我们可以在 UI 线程中使用该异步委托来等待耗时操作的完成:
private async void WaitSecondsAsync()
{
MyAsyncDelegate asyncDelegate = async () =>
{
// 暂停执行 5 秒钟
await Task.Delay(5000);
MessageBox.Show("等待完成!");
};
await asyncDelegate();
}
上述代码中,我们先定义了一个异步委托 MyAsyncDelegate
,然后在 UI 线程中使用该异步委托来执行异步操作。这样,就可以在不阻塞 UI 线程的情况下等待几秒钟了。
在不阻塞 UI 执行的情况下等待几秒钟,可以使用异步编程模型、Task.Run()
方法或异步委托来实现。在使用异步编程模型时,建议使用 async/await
关键字,以让代码更加清晰易懂。