小编Pan*_*los的帖子

异步/等待,运行阻止UI没有明显的原因

我再一次重新研究了异步任务.无论我如何设置任务,我的应用程序一直受到UI冻结的影响.我有以下代码从网页下载字符串:

internal string DownloadString(string URL)
{
      var result =  LoadCompanyContracts(URL);
      return result.Result;
}

internal async Task<string> LoadCompanyContracts(string URL)
{
Task<string> task2 = Task<string>.Factory.StartNew(() =>
{
     for (int i = 0; i <= 10000000; i++) Console.WriteLine(i);
     WebClient wc = new WebClient();
     string tmp = wc.DownloadString(new Uri(URL));
     return tmp;
});
return task2.Result;

}
Run Code Online (Sandbox Code Playgroud)

当我执行此任务时,在for循环期间,我的应用程序的UI正在冻结.即使我相信这段代码不应该冻结UI我也无法找到解决方案.我尝试了很多不同的选项,并且真的想使用任务而不是使用webclient异步的线程或事件.

信息:我正在为我的项目使用.net 4.5.我的代码的不同之处在于这些函数在类库中(不知道它是否重要).

是否可以通过从我的代码中调用DownloadString函数来运行此代码而不用异步await阻止用户界面?如果不是什么替代品(任何好的nuget包)?

c# wpf asynchronous task

0
推荐指数
1
解决办法
155
查看次数

标签 统计

asynchronous ×1

c# ×1

task ×1

wpf ×1