【问题标题】:Progressbar not showing while doing calculation计算时进度条不显示
【发布时间】:2018-09-20 22:39:07
【问题描述】:

我在 C# 中创建了一个 Windows 窗体。 在这种形式中,我有一个“计算按钮”和一个 ProgressBar

当我单击计算按钮时,会生成一个用户控件,并在此用户控件中进行一些计算。我希望进度条显示用户控件中的计算进度。

在主窗体中我有这个代码:

public Main()
{
   InitializaComponent()
}
private void Btn_PVT_Validar_Click(object sender, EventArgs e)
{
       progressbar.Visible = true;
       progressbar.Maximum=115;
       M_Results m_Results = new M_Results()
       m_Results.Visible = true;
}

在 userControl 我有这个:

public Results()
{
   InitializaComponent()
}
 private void Results_Load(object sender, EventArgs e)
 {
        Control parent = this.Parent as Control;
        pbar = parent.Controls["progressbar"] as radProgressBar;
        dens();
 }
private void dens()
{
 //loop calculattion and other stuffs and in each loop i have this:
 pbar.value1=pbar.value1+2;
}

progressabar 进度没有显示,当一切都完成时,progressbar 出现并且已满。

我该怎么办?

谢谢卡洛斯

【问题讨论】:

  • 最简单的方法是使用报告进度的后台工作人员,您也可以将 dens() 作为任务运行 - 谷歌他们!

标签: c#


【解决方案1】:

每次更改进度条值时使用Application.DoEvents()

private void dens()
{
   pbar.value1=pbar.value1+2;
   Application.DoEvents();
}

【讨论】:

  • 有更好的方法可以做到这一点,请参阅我上面的评论。
  • @Kevin 我知道这一点,我完全同意你的看法,但在这种情况下,我得到的暗示是 OP 对更新 progressbar.value 不会生效和解决这个问题的简单方法感到困扰,当然在另一个线程中运行它会更有效,特别是如果任务循环需要很长时间。但我认为这不是 OP 想要的。
  • 我知道应该避免使用 doevents(),但该解决方案对我有用……最好的方法是使用 backgroudworker,但我是基本编码器,我还不知道如何实现那个。
  • @calarez 这正是我提出这个建议的原因。实际上从你的问题我明白了。所以我的答案就是你要找的?
  • 是的......但我有一个问题......在 Dens() 中生成的一些图表与进度条更新算法一起显示:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2016-09-13
相关资源
最近更新 更多