C#-WPF-计数器执行的统一时间

C#-WPF-计数器执行的统一时间,c#,wpf,user-interface,animation,counter,C#,Wpf,User Interface,Animation,Counter,我有一段代码,用于收集目录数据并将其填充到字段(对于ex size)。 计划是更新计数器之类的UI字段,因此我做了如下操作: int fileCount //pupulated from another class Thread t = new Thread(() => { for (int i = 1; i < fileCount; ++i) { (sen

我有一段代码,用于收集目录数据并将其填充到字段(对于ex size)。 计划是更新计数器之类的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();
int fileCount//p从另一个类计算
线程t=新线程(()=>
{
对于(int i=1;i
问题是有些文件夹可能有10个项目,有些文件夹可能有10万个项目。 有没有办法设置一个执行时间限制,这样对于那些大目录,TextBlock会更新得更快

我想到的一件事是使Thread.Sleep()依赖于fileCount的值

switch (fileCount)
case fileCount < 100: y=10
case fileCount < 1000: y=1
(...)
Thread.Sleep(y);
开关(文件计数)
案例文件计数<100:y=10
案例文件计数<1000:y=1
(...)
睡眠(y);

有更好的方法吗?

您可以改变每次迭代的延迟和增加量

您几乎应该总是避免使用thread.sleep now Wait 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();
    }
private异步void animateDisplay(整数计数)
{
整数增量=计数/100;
如果(增量<0)
{
增量=1;
}
对于(int i=0;i
您只需传入filecount。
我猜你不会经常在一个文件夹中存储100k,但是如果你减少延迟时间并使用较小的增量,大多数数字无论如何都是模糊的。

确实如此。您可以使用它定期将UI与某个线程生成的数据进行同步。为什么您想睡觉?坦率地说,我不知道有什么更好的方法-这就是为什么我问是否有更好的方法:)我让它进入睡眠状态是为了查看UI中的增量,它可以按预期工作。我只想对那些小的和大的数字统一执行时间,例如,100个项目将在1秒内从1计数到100,对于1到100k项目也是如此。工作起来很有魅力(ノ◕ヮ◕)ノ*:・゚✧