c# - 第一次单击异步按钮时,UI 冻结 5 秒
问题描述
当第一次单击按钮时,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 秒时,第一次单击按钮时可以吗?
解决方案
可能有一些缓存。每次调用都尝试另一个 URL。但是等待它不应该阻塞。
我测试了,我没有滞后。我会开始一个新的客户。一些奇怪的事情正在发生。
放入一些秒表调试来尝试找出滞后在哪里。
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);
}
推荐阅读
- spring-boot - 如何从 AuthorizationFailureEvent 获取 Spring Boot 中的请求 URL
- scala - 在 Scala 中将 IO[Either[String, User]] 映射到 IO[User]
- kotlin - 如何知道 val 的值是在编译时还是在运行时分配的?
- postgresql - 2 个表之间的 SQL 触发器出错,其中一个表有外键
- python - 使用中位数时面对“'numpy.ndarray'对象没有属性'median'”错误
- python - 如何断言如果方法没有返回语句而不在python中调用它
- onclicklistener - OnClickListener 抛出空指针引用
- google-apps-script - 使用循环脚本更新大量电子表格
- scala - 如何在 sbt 中按扩展名映射文件?
- kotlin - 如何在新版本的 Koin 中访问对象范围