执行异步线程await Task.Run()方法后,UI线程会因等待异步方法执行结果而阻塞,有什么方法能不阻塞UI,请给出详细示例代码
时间: 2024-03-19 10:45:23 浏览: 82
聊一聊C# 8.0中的await foreach使用
可以使用async/await来避免UI线程的阻塞。
示例代码如下:
```csharp
private async void Button_Click(object sender, RoutedEventArgs e)
{
// 在后台线程执行耗时操作
await Task.Run(() =>
{
// 执行耗时操作
Thread.Sleep(5000);
});
// 耗时操作完成后更新UI
UpdateUI();
}
private void UpdateUI()
{
// 在UI线程中更新UI
Dispatcher.BeginInvoke(new Action(() =>
{
// 更新UI控件
MyLabel.Content = "耗时操作完成";
}));
}
```
在这个示例中,点击按钮时,会在后台线程执行耗时操作,而不会阻塞UI线程。当耗时操作完成后,会在UI线程中调用UpdateUI方法来更新UI控件。
需要注意的是,async/await机制并不能减少耗时操作的执行时间,只是让UI线程不会被阻塞。如果耗时操作非常耗时,仍然可能会对用户体验造成影响。
阅读全文