Progressbar Windows 10 - 慢速UI更新?

时间:2018-01-14 20:54:09

标签: winforms windows-10 progress-bar

我有一个在Windows 7和Windows 10计算机下运行的应用程序。

一种非常简单的方法"在启动期间传输一些文件,因此进度条显示进度(0-100%),同时检查有问题的文件(更改日期)是否需要再次复制。

使用Windows 7,一切都按预期工作。基本上它只是一个foreach,比较日期,然后复制或不复制。

for (i = 0; i < fileCount; i++)
   {
      copyOrNot(files[i]);
      progress = ((Double)i + 1) / (Double)fileCount;
      this.progressBar_Loading.Value = Convert.ToInt16(progress);
      Application.DoEvents();
   }

使用Windows 7的应用程序,无论是否复制文件,进度条都可以完美地运行到100%。

对于Windows 10,我注意到,进度条的UI更新是&#34;该死的很慢&#34; - 如果20个文件中没有需要复制,则进度条最多显示50%,然后整个过程结束并且应用程序启动。

虽然(技术上)没有区别,但如果Windows 10能够显示正确的进度,即使不需要(耗时的)副本,它也会很好。&#34;很好。

添加&#34; Thread.Sleeps&#34;每个文件修复Windows 10的问题后 - 但我不想人为地减慢这个过程只是为了在Windows 10上有一个正确的UI输出。

有什么建议吗?

ps。在&#34; Splash-Screen&#34;期间,所有内容都发生在UI-Thread上,因此Application.DoEvents()

pps。:即使&#34;状态标签&#34;报告状态说&#34; 100%&#34; - Windows 10下的进度条刚刚进入约50%)

编辑:

示例,Windows 10(使用Windows 7,进度条已经达到&#34;结束&#34;栏 - 计算报告100%,用户界面没有。)

enter image description here

Windows 7:

enter image description here

编辑:我现在把所有的时间都花在了自己的线程上,使用代理来更新ui - 仍然是同样的问题。

只添加&#34; Thread.sleep&#34;在线程结束时大约250毫秒允许UI在Windows 10下的进度条上正确显示100%...

0 个答案:

没有答案