簡體   English   中英

在Vista或Windows7中,C#Progressbar未准確更新

[英]C# Progressbar is not updated accurately in Vista or Windows7

public partial class Form1 : Form
{
  //....
  private void timer1_Tick(object sender, EventArgs e)
  {
     if (this.progressBar1.Value >= 100)
     {
         this.timer1.Stop();
         this.timer1.Enabled = false;
     }
     else
     {
         this.progressBar1.Value += 10;
         this.label1.Text = Convert.ToString(this.progressBar1.Value);                
     }
  }
  //......
}

在這里,我使用計時器來更新進度條值。 它在XP中運行良好。 但是在Windows7或Vista中,當進度值設置為100但圖形進度不是100時!

搜索一些線程發現其動畫在Vista / Windows7中滯后。

怎么擺脫這個東西?

我不想使用以下方法來消除Vista / Window7的外觀和感覺:

SetWindowTheme(progressBar1.Handle, " ", " ");

我有同樣的問題。 Fozi的tipps幫助了我。 除非最大值(100%),否則Samir的解決方案將正常工作。 為了使這項工作也達到100%,必須在之前增加最大值。 以下對我來說很好。

if (NewValue < progressBar.Maximum)
{
  progressBar.Value = NewValue + 1;
  progressBar.Value--;
}
else
{
  progressBar.Maximum++;
  progressBar.Value = progressBar.Maximum;
  progressBar.Value--;
  progressBar.Maximum--;
}
  private void timer1_Tick(object sender, EventArgs e)
    {

        if (progressBar1.Maximum == 1) progressBar1.Maximum = 100;
        if (progressBar1.Value==100) {
            progressBar1.Value = 0;
            return;
        }
        progressBar1.Increment(1);
        if (progressBar1.Value == 100) {
            progressBar1.Value = 1; progressBar1.Maximum = 1;
            progressBar1.Update();
        }
    }

這些是我通過適當的全面繪制進度條來解決win7問題的技巧。

這就是愚蠢的進度條在Vista及其后的工作方式。

沒有解決辦法。

抱怨微軟。

public partial class Form1 : Form
{
  //....
  private void timer1_Tick(object sender, EventArgs e)
  {
    if (this.progressBar1.Value >= 100)
    {
     this.timer1.Stop();
     this.timer1.Enabled = false;
    }
    else
    {
      int tempValue = this.progressBar1.Value + 10;
      if (tempValue < 100 && tempValue >=0 )
      {
       this.progressBar1.Value = tempValue + 1;
       this.progressBar1.Value = tempValue;
      }
      else if (tempValue >= 100)
      {
       this.progressBar1.Value = 100;
       this.progressBar1.Value = 99;
       this.progressBar1.Value = 100;
      }
     this.label1.Text = Convert.ToString(this.progressBar1.Value);                
    }
  }

//......
}

else部分使進度條現在看起來不錯。 但是應該有一些標准的進度條方式。 這個想法是從Fozi的評論點擊這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM