vic*_*jia 2 c# wpf async-await
我有以下基本的WPF应用程序,我希望在文本框中显示内容.但是,当我单击按钮时,UI线程似乎正在阻塞.我不确定我做错了什么,因为我从Pluralsight课程的练习文件中抓取了这段代码.
XAML和代码:
<Window x:Class="AsyncFetch.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button
x:Name="getButton"
HorizontalAlignment="Left"
Width="75"
Content="_Get Data"
Click="getButton_Click"
/>
<TextBox
x:Name="dataTextBox"
Margin="4"
Grid.Row="1"
/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
代码:
namespace AsyncFetch
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void getButton_Click(object sender, RoutedEventArgs e)
{
WebClient w = new WebClient();
string txt = await w.DownloadStringTaskAsync("http://www.google.com");
dataTextBox.Text = txt;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不应该阻止UI线程,并且该技术是正确的.
但是,仅仅因为方法是Async并返回a Task<T>,并不能保证整个方法(或任何方法)将异步运行.
在这种情况下WebClient,控制器将在请求完全准备好并开始之后才返回给调用者.有了WebClient,我相信URI准备,包括所有DNS查找,可以同步发生,并且在异步部分(实际请求)开始之前是必需的,这可能会在请求返回之前导致延迟.
| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |