第一次点击按钮时,UI冻结5秒可以吗?我的意思是,当我点击按钮从网站加载内容,然后我不能移动窗口5秒。
我的代码如下所示:
private async void Button_Click(object sender, RoutedEventArgs e)
{
var html = await GetHtmlAsync("http://msdn.microsoft.com");
MessageBox.Show(html.Substring(0, 10));
}
public async Task<string> GetHtmlAsync(string url)
{
var webClient = new WebClient();
return await webClient.DownloadStringTaskAsync(url);
}但是,如果我再次单击上面的按钮或单击其他async按钮,则不会出现UI冻结。
那么,当UI冻结5秒时,当第一次单击按钮时,是否可以呢?
发布于 2018-06-11 06:47:43
HttpClient是可行的方法,但让我们看一下代码。
正在提取corefx source的代码。如果你真的得到了一个HttpWebRespone,这个代码片段可能会指向你所看到的问题。
public override Stream GetResponseStream()
{
CheckDisposed();
return _httpResponseMessage.Content.ReadAsStreamAsync().GetAwaiter().GetResult();
}发布于 2018-06-11 00:14:52
可能会有一些缓存。每次调用时尝试另一个URL。但在等待的情况下,它不应该被阻塞。
我测试过了,没有任何延迟。我会开始一个新的客户。有些奇怪的事情正在发生。
放入一些秒表Debug,试着找出延迟在哪里。
private async void btnURLclick(object sender, RoutedEventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
var html = await GetHtmlAsync("http://msdn.microsoft.com");
Debug.WriteLine($"btn {sw.ElapsedMilliseconds}");
MessageBox.Show(html.Substring(0, 10));
}
public async Task<string> GetHtmlAsync(string url)
{
Stopwatch sw = new Stopwatch();
sw.Start();
var webClient = new WebClient();
Debug.WriteLine($"taskA {sw.ElapsedMilliseconds}");
return await webClient.DownloadStringTaskAsync(url);
}发布于 2018-06-11 02:51:12
这可能是由于某些通信初始化造成的。试试这个:
public async Task<string> GetHtmlAsync(string url)
{
await Task.Delay(1).ConfigureAwait(false);
var webClient = new WebClient();
return await webClient.DownloadStringTaskAsync(url).ConfigureAwait(false);
}https://stackoverflow.com/questions/50784701
复制相似问题