如何解决C#-WPF-计数器执行的统一时间
我有一段代码收集目录数据并将其填充到字段中(例如ex大小)。 计划是更新UI字段(例如计数器),因此我做了如下操作:
int fileCount //pupulated from another class
Thread t = new Thread(() =>
{
for (int i = 1; i < fileCount; ++i)
{
(sender as Button).Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,new Action(delegate ()
{
FileCountBox.Text = i.ToString();
}));
Thread.Sleep(10);
}
});
t.IsBackground = true;
t.Start();
问题是某些文件夹可能包含10个项目,而某些文件夹可能包含10万个项目。 有没有办法设置执行时间限制,以便对那些大目录更快地更新TextBlock?
我要记住的一件事是使Thread.Sleep()依赖于fileCount的值。
switch (fileCount)
case fileCount < 100: y=10
case fileCount < 1000: y=1
(...)
Thread.Sleep(y);
有更好的方法吗?
解决方法
您可以更改延迟和每次迭代增加的数量。
几乎应该始终避免thread.sleep现在等待Task.Delay()可用。
此代码最多提供101个步骤:
private async void animateDisplay(int count)
{
int increment = count / 100;
if(increment < 0)
{
increment = 1;
}
for (int i = 0; i < count; i+=increment)
{
FileCountBox.Text = i.ToString();
await Task.Delay(10);
}
FileCountBox.Text = count.ToString();
}
您只需传递文件计数。 我猜您文件夹中不会经常有100k,但是如果您减少延迟时间并使用较小的增量,那么无论如何大多数数字都会变得模糊。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。