将百分比文本添加到进度条C#

时间:2015-11-19 16:36:22

标签: c# progress-bar windows-forms-designer percentage

我有一个方法可以显示进程条何时执行以及何时成功完成。

我工作得很好,但我想添加百分比显示100%是否完整,如果它被卡在某些地方则更少。

我已经在线进行了多项研究,但我无法适应我正在寻找的解决方案。

这是我的代码:

private void progressBar()
{
    int i;

    progressBar1.Minimum = 0;
    progressBar1.Maximum = 100;

    for (i = 0; i <= 100; i++)
    {
        progressBar1.Value = i;               
    }
}

我在执行按钮上使用方法调用,通过以下方式调用它:

progressBar();

由于

4 个答案:

答案 0 :(得分:1)

我已使用以下行调整prograssBar方法。

解决方案有效。

由于

int percent = (int)(((double)progressBar1.Value / (double)progressBar1.Maximum) * 100);
            progressBar1.Refresh();
            progressBar1.CreateGraphics().DrawString(percent.ToString() + "%",
                new Font("Arial", (float)8.25, FontStyle.Regular),
                Brushes.Black,
                new PointF(progressBar1.Width / 2 - 10, progressBar1.Height / 2 - 7));

答案 1 :(得分:0)

为了实现操作的进度,必须首先计算操作的长度。如果不可能,则无法显示该操作的进度条。 (也许只是加载gif)

但如果是这样,有一个界面( IProgress )可以帮助您实施进度报告。

首先你应该知道,你必须在另一个线程上执行主任务,并将进度报告给UI线程。这项工作的一个简单例子就是这样。

Progress.cs

public class Progress<T> : IProgress<T>
{
    private readonly Action<T> _progressAction;

    public Progress(Action<T> action)
    {
        _progressAction = action;
    }

    public void Report(T value)
    {
        _progressAction?.Invoke(value);
    }
}

您的代码就像这样,在您单击名为ButtonBase的按钮

后,任务开始
Progress<int> MyProgressObject { get; set; }

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    MyProgressObject = new Progress<int>(ProgressAction);
    ThreadPool.QueueUserWorkItem(TimeConsumingTask);
}

public void TimeConsumingTask(object state)
{
    for (int i = 0; i < 100; i++)
    {
        Thread.Sleep(100);
        MyProgressBar.Dispatcher.Invoke(() => ProgressAction(i));
    }
}

public void ProgressAction(int progress)
{
    MyProgressBar.Value = progress;
}

我知道这可能看起来很困难,但这是执行耗时任务并阻止UI阻止的正确方法

答案 2 :(得分:0)

如果您将其用作backgroundworker的一部分,则可以完美运行 我在进度条中间添加了一个标签

然后我在bgw_ProgressChanged方法中添加了最后一行

np.matrix.shape

ProgressPercentage值来自下面的方法

    private void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        p_bar.Value = e.ProgressPercentage;
        fnameLbl.Text = e.UserState.ToString();
        percentLbl.Text = "%" + (e.ProgressPercentage).ToString();
    }

Totfiles是我从服务器获取的文件数。

Thread.Sleep(100)让您在短时间内看到fnameLbl.Text显示的内容

答案 3 :(得分:0)

int total = ;
int val = ;

double createDivider = total / 100;
int percent = val / createDivider;

此值(百分比)是总计的正确百分比'%'