首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#进度条未正确更新

C#进度条未正确更新
EN

Stack Overflow用户
提问于 2015-06-12 17:50:15
回答 2查看 1.3K关注 0票数 0

我在C#中有一个小程序,它重命名并调整给定目录中所有图片的大小。

问题是,即使每个文件都是在一个循环中处理的,并且ProgressBar.Increment(1)在这个循环的末尾,它仍然在加载时跳过一些数字,就像它的异步。我不想那样,我想要它顺利,并显示它是确切的文件,没有任何滞后或延迟。有什么不对的?

代码语言:javascript
运行
复制
private void renameAndResizeFiles() {
        string[] fileEntries = Directory.GetFiles(directory);
        int filesNumber = fileEntries.Length;
        progressBar.Maximum = filesNumber;
        int i = 1;
        foreach (string oldFileNamePath in fileEntries) {
            // handle file work
            i++;
            updateProgressBar(filesNumber, i);
        }
        progressBar.Refresh();
        progressBar.Value = 0;
    }

    private void updateProgressBar(int filesNumber, int i) {
        progressBar.Refresh();
        progressBar.CreateGraphics().DrawString(i + " / " + filesNumber, 
            new Font("Arial", (float) 10.0, FontStyle.Regular), 
            Brushes.Black, 
            new PointF(progressBar.Width / 2 - 10, progressBar.Height / 2 - 7));
        progressBar.Increment(1);
    }

另外,这是在进度栏上显示文本的最佳方式吗?

EN

Stack Overflow用户

回答已采纳

发布于 2015-06-12 18:17:13

关于进度条上的文本,这取决于您使用的是WinForms还是WPF。如果使用WPF,我会考虑在xaml中布局某种网格,在其中您可以在部分进度条上放置一个TextBlock,并使用DependencyProperties更新它们。对于WinForms不太确定,但可能不是.CreateGraphics().DrawString(),您最好还是把ProgressBar和TextBlock控件放在适当的位置,并直接更新它们。

至于顺利的更新,这很可能是因为您没有最小的更新时间,而且有些更新可能太快了,以至于似乎“跳过”了它们。要确保看到每个进度栏步骤,请尝试在更新进度条方法中的某个位置插入一个Thread.Sleep(50)

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30809296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档