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

C# - WPF - Unified time of counter execution

我有一段代码可以收集目录数据并将其填充到字段(用于 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,但如果你减少延迟时间并使用较小的增量,大多数数字无论如何都会变得模糊。